Как мне читать из файла и сохранять его в массив структур?

#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.