非常抱歉,我之前的回答有些错误。在代码中,每次循环都会覆盖之前写入文件的数据,导致最后只会保存最后一个学生的数据。为了解决这个问题,我们可以使用数组来存储多个学生的数据,并将整个数组写入文件。
以下是修改后的代码:
#include <stdio.h>
#include <stdlib.h>
struct students {
char id[20];
char name[20];
float average;
float achievement;
};
int main(int argc, char const *argv[]) {
struct students number[3];
FILE *fp;
int i, j;
float sum;
// 打开文件,如果文件不存在则创建新文件
fp = fopen("stud", "wb+");
if (fp == NULL) {
printf("无法打开文件\n");
exit(1);
}
for (i = 0; i < 3; i++) {
printf("请输入学号:\n");
scanf("%s", number[i].id);
printf("请输入名字:\n");
scanf("%s", number[i].name);
printf("请分别输入三门成绩:\n");
sum = 0;
for (j = 0; j < 3; j++) {
scanf("%f", &number[i].average);
sum += number[i].average;
}
number[i].achievement = sum / 3;
// 将学生数据写入文件
fwrite(&number[i], sizeof(struct students), 1, fp);
}
// 将文件指针移动到文件开头
rewind(fp);
printf("学生数据已保存至磁盘文件"stud"中:\n");
// 从文件中读取并显示学生数据
for (i = 0; i < 3; i++) {
fread(&number[i], sizeof(struct students), 1, fp);
printf("学号:%s 姓名:%s 平均成绩:%0.2f\n", number[i].id, number[i].name, number[i].achievement);
}
// 关闭文件
fclose(fp);
return 0;
}
现在,每个学生的数据都会被正确地写入文件"stud"中,并在最后从文件中读取和显示。希望这次能满足你的需求!如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |