文件中的内容, 是以结构的形式写入的, 现在要求读第三个和第五个学生的成绩, 修改学生成绩,并回写

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 /*
 4 题目:文件中的内容, 是以结构的形式写入的, 现在要求读第三个和第五个学生的成绩,
 5 修改学生成绩,并回写
 6 */
 7 typedef struct student
 8 {
 9     char name[20];
10     float math;
11     float chinese;
12 }STU;    
13 int main(void)
14 {
15     STU stu[] = {
16         {"张三",88,99},
17         {"李四",96.5,5},
18         {"王麻子",93,80},
19         {"赵四",61,60},
20         {"f4",85,100}
21     };
22     FILE *fp = fopen("stu,data","wb+");
23     fwrite((void *)stu,sizeof(stu),1,fp);
24     rewind(fp);
25     printf("修改前
");
26     STU a;
27     while(fread((void *)&a,sizeof(STU),1,fp) >0 )
28     {
29         printf("%s	%.2f	%.2f
",a.name,a.math,a.chinese);
30     }
31     fclose(fp);
32     printf("

修改后
");
33     int len = 0;
34     STU *p = stu;
35     FILE *fp1 = fopen("stu,data","rb+");
36     while(fread((void *)p,sizeof(STU),1,fp) > 0)//注意:此处不能用fread((void *)&a,sizeof(STU),1,fp),因为每次读取后存放在a中,每次的数据会覆盖掉。
37     {
38         len++;
39         if(3 == len)
40         {
41             printf("第三个学生数学成绩修改为:");scanf("%f",&p->math);
42             printf("第三个学生语文成绩修改为:");scanf("%f",&p->chinese);
43         }
44         if(5 == len)
45         {
46             printf("第五个学生数学成绩修改为:");scanf("%f",&p->math);
47             printf("第五个学生语文成绩修改为:");scanf("%f",&p->chinese);
48         }
49         p++;
50     }
51     rewind(fp);
52     fwrite((void *)stu,sizeof(stu),1,fp);
53     rewind(fp);
54     while(fread((void *)&a,sizeof(STU),1,fp) >0 )
55     {
56         printf("%s	%.2f	%.2f
",a.name,a.math,a.chinese);
57     }
58     fclose(fp);
59 
60 
61     return 0;
62 }
原文地址:https://www.cnblogs.com/wangchaomahan/p/9797632.html