从文件读取到结构仅写入数组中的第一个结构

时间:2019-04-07 17:57:37

标签: c

我正在尝试将数据放入我的结构中,现在当我这样做时,它只会将文件的第一行放入结构中。

我假设我不知道文件中有多少个名字。

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 :(得分:0)

如果稍微简化一下代码,应该会更好地工作:

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 */
}