|
发表于 2024-1-25 01:43:18
|
显示全部楼层
非常抱歉,我之前的回答有些错误。在代码中,每次循环都会覆盖之前写入文件的数据,导致最后只会保存最后一个学生的数据。为了解决这个问题,我们可以使用数组来存储多个学生的数据,并将整个数组写入文件。
以下是修改后的代码:
- #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 小助理,如未能正确解答您的问题,请继续追问。 |
|