#c
#c
Вопрос:
У меня есть файл с данными:
30 101 201 35
31 102 203 35
31 103 202 35
32 103 201 50
33 102 203 40
33 103 202 105
33 101 201 70
И структура:
struct data
{
int day;
int emp;
int pro;
int sal;
};
Я хочу прочитать весь файл и сохранить его в массив структур, а затем распечатать его. Это то, что у меня есть:
int main()
{
FILE *file=NULL;
struct data salesarr[10];
int i;
file=fopen("Sales Report.txt","r");
//Error Function
if(file == NULL)
{
printf("Error!");
exit(1);
}
for(i=0;i<10;i )
{
fscanf(file,"%d %d %d %d",salesarr[i].day,salesarr[i].emp,salesarr[i].pro,amp;salesarr[i].sal);
printf("%d %d %d %dn",salesarr[i].day,salesarr[i].emp,salesarr[i].pro,salesarr[i].sal);
}
}
Я знаю, что есть более простые способы чтения и печати всего файла, но я хочу поместить его в структурный массив, чтобы я мог делать с ним другие вещи, например, сортировать.
Комментарии:
1.Основные проблемы, которые я вижу, заключаются в том, что в файле меньше
10
записей, что вы не проверяете, чтоfscanf
возвращается, и что вам нужно отслеживать текущее количество инициализированных элементов в массиве после завершения цикла.2. Я предлагаю читать файл построчно, используя
fgets
и анализировать полученную строку сsscanf
помощью вместо использованияfscanf
.fgets
вернетсяNULL
при EOF или ошибке. Проверьте возвращаемое значениеsscanf
(илиfscanf
), чтобы узнать, было ли проанализировано ожидаемое количество полей 4.3.
fscanf
ожидает, что указатели на переменные будут сохранять проверенные значения. Вместо этого вы передаете целочисленные переменные для 3 из 4 параметров. Ваш компилятор должен предупредить вас. Если нет, включите уровень предупреждения. Для использования GCC-Wall -Wextra
.4. Спасибо. Мне удалось сделать это с помощью fgets и sscanf.