我正在尝试将数据放入我的结构中,现在当我这样做时,它只会将文件的第一行放入结构中。
我假设我不知道文件中有多少个名字。
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
请帮助我修复代码。
答案 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 */
}