【发布时间】:2019-07-10 18:29:54
【问题描述】:
如果网上有很多关于此的信息,我深表歉意...我不知道为什么,但我似乎无法将所有内容拼凑在一起,这让我感到沮丧。
我正在处理一项任务,我必须从文件中读取数据(在命令行参数中指定),然后创建函数以将与该函数相关的数据解析为动态二维数组。我基本上应该根据这些数据创建一个成绩报告。
数据集的格式如下:
4
5
John Steve James Susan Emily
100 98 78 96 88
98 85 86 92 75
89 65 78 80 95
72 99 65 92 87
(这不是作业的确切样本数据集——我不是在寻找确切的答案,只是想了解一下;我拥有的数据集不是用于测试的数据。)
第一行是作业的数量,第二行是学生的数量,第三行是学生的姓名,之后的每一行是每个学生在每项作业中的成绩。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NAME_LENGTH 10
void getGrades(FILE *ifp, int assigns, int stus, int grades[assigns][stus], char students[stus][NAME_LENGTH]);
void printGrades(int assigns, int stus, int grades[assigns][stus]);
void getStudents(FILE *ifp, int stus, char students[stus][NAME_LENGTH]);
void printStudents(int stus, char students[stus][NAME_LENGTH]);
void calcGrades(int assigns, int stus, int grades[assigns][stus], double final_grades[]);
void printFinalLetterGrades(int stus, double final_grades[]);
void printPercentageGrades(int stus, char students[stus][NAME_LENGTH], double final_grades[]);
int main(int argc, char *argv[])
{
FILE *ifp = NULL;
int assigns = 0;
int stus = 0;
int grades[assigns][stus];
char students[stus][NAME_LENGTH];
double final_grades[stus];
if (argc != 2)
{
if (argc < 2)
{
printf("Input file not specified: ./<exec> <infile>");
exit(1);
}
else if (argc > 2)
{
printf("Too many arguments: ./<exec> <infile>");
exit(1);
}
}
ifp = fopen(argv[1], "r");
if (ifp == NULL)
{
printf("Error: could not open %s.", argv[1]);
exit(1);
}
fscanf(ifp, "%d%d", &assigns, &stus);
//functions will go in this section
fclose(ifp);
return 0;
}
我已打开文件并使用 fscanf 读取前两行并将它们分别分配给变量“assigns”和“stus”,但我需要能够遍历整个数据才能能够在各自的函数(getGrades 和 getStudents)中填充二维数组“grades”和“students”。我如何解析这些数据以使其成为可能?我考虑过使用 fgets 扫描整个数据集,然后尝试使用 sscanf 解析数据,但我觉得这里缺少一些不那么复杂的东西,我无法弄清楚它是什么。此外,我担心以这样的方式编写它,它可以与我拥有的样本数据集一起使用,但不能与他们测试的数据集一起使用。
我快把头发扯掉了,谁能指出我正确的方向?一旦我达到这一点,我确信我可以弄清楚其余的。非常非常感谢!
【问题讨论】:
标签: c file-io scanf fgets text-parsing