Я прошу прощения, если есть много информации об этом в Интернете ... Я не знаю почему, но я не могу собрать все воедино, и это разочаровывает меня до бесконечности.
Я работаю над заданием, в котором мне нужно прочитать данные из файла (указанного в аргументе командной строки), а затем создать функции для анализа данных, относящихся к этой функции, в динамический двумерный массив.По сути, я должен создать отчет об оценке на основе этих данных.
Набор данных отформатирован следующим образом:
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).Как я могу проанализировать эти данные, чтобы сделать это возможным?Я рассмотрел использование fgets для сканирования всего набора данных, а затем пытался проанализировать данные с помощью sscanf, но я чувствую, что есть кое-что гораздо менее сложное, чего мне не хватает, и я не могу понять, что это такое.Кроме того, я беспокоюсь о том, чтобы написать это так, чтобы это работало с имеющимся у меня образцом данных, но не с тем набором данных, с которым они тестируют.
Я собираюсь порвать волосыкто-нибудь может указать мне в правильном направлении?Как только я доберусь до этой точки, я уверен, что смогу понять все остальное.Большое, большое спасибо заранее!