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("修改前\n");
26 STU a;
27 while(fread((void *)&a,sizeof(STU),1,fp) >0 )
28 {
29 printf("%s\t%.2f\t%.2f\n",a.name,a.math,a.chinese);
30 }
31 fclose(fp);
32 printf("\n\n修改后\n");
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\t%.2f\t%.2f\n",a.name,a.math,a.chinese);
57 }
58 fclose(fp);
59
60
61 return 0;
62 }