считывание данных из входного файла и хранение их в массиве struct


Я планирую прочитать входной файл, который имеет имя и номер, разделенные отступом, например

Ben     4
Mary    12
Anna    20
Gary    10
Jane    2

, а затем выполнить сортировку данных в куче. Однако у меня возникли проблемы с копированием данных и хранением их в массиве struct.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxcustomers 100

struct customer{
    char name[20];
    int service;
};

int main()
{
    struct customer list[maxcustomers];
    int i;
    char c;

    FILE *input;
    FILE *output;
    input = fopen("input-file.txt","r");
    output = fopen("output-file.txt","w");

    if(input == NULL){
        printf("Error reading filen");
        exit(0);
    }
    else{
        printf("file loaded.");

    }
    while((c=fgetc(input))!=EOF){
           fscanf(input, "%s %d", &list[i].name,&list[i].service);

           printf("%s %d", list[i].name,list[i].service);
           i++;
    }
    fclose(input);
    //heapsort(a,n);
    //print to output.txt
    fclose(output);

    return 0;
}

До сих пор он регистрирует, что открывает файл и печатает "файл загружен", но после этого терпит неудачу. очевидно, что я не сохраняю данные в структуру.

2 2

2 ответа:

Вы потребляете / прогуливаете файл как с fgetc, так и с fscanf, Используйте только fscanf:

while (fscanf(input, "%19s %d", list[i].name, &list[i].service) == 2) {
       printf("%s %d", list[i].name, list[i].service);
       i++;
}
Обратите внимание, что вам не нужен адрес оператора в &list[i].name, потому что он уже (распадается на) указатель.

В дополнение к тому, что сказал @Keine Lust, i не имеют начального значения, вы не можете использовать/increment integer без значения, как вы это сделали.

Попробуйте: int i=0