чтение из файла в структуру записывает только первую структуру в массиве - PullRequest
0 голосов
/ 07 апреля 2019

Я пытаюсь вставить данные в свою структуру, теперь, когда я делаю это, в нее попадает только первая строка файла.

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

int InputData(student ** p_array, FILE * fp) {
    student * arr;
    int i = 1;`

    if (!(arr = (student*)malloc(sizeof(student)))) {
        printf("no");
        _getch();
        exit(1);
    }
    while (fscanf(fp, "%s %d %d %d", arr[i - 1].name, &arr[i - 1].grades[0], &arr[i - 1].grades[1], &arr[i - 1].grades[2]) != EOF) {
        i++;
        if (!(arr = (student*)realloc(arr, i*sizeof(student))))
        {printf("no"); _getch(); exit(1); }
    }
    arr = (student*)realloc(arr, (i - 1) * sizeof(student));
    *p_array = arr;
    if (i = 1)
        return (i);       /*return the number of students*/
    else
        return (i - 1);
}

пример содержимого файла

 Moshe 100 80 90
 Dana 56 89 78
 Maya 88 87 91
 Adam 90 74 81

массив получает только эту строку

 Moshe 100 80 90

Пожалуйста, помогите мне исправить код.

1 Ответ

0 голосов
/ 07 апреля 2019

Должно работать лучше, если вы немного упростите код:

int InputData(student **p_array, FILE *fp)
{
    student *arr;
    char buf[80];
    int i = 0;

    arr = (student *)malloc(sizeof(student));
    if (!arr) {
        printf("no");
        _getch();
        exit(1);
    }

    while (fscanf(fp, "%s %d %d %d", arr[i].name, &arr[i].grades[0], &arr[i].grades[1], &arr[i].grades[2]) != EOF) {
        i++;
        arr = (student *)realloc(arr, (i + 1) * sizeof(student));
        if (!arr)
            err(errno, "Failed realloc() array");
    }

    arr = (student *)realloc(arr, i * sizeof(student));
    *p_array = arr;

    return i;       /* return number of students */
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...