文件中的内容, 是以结构的形式写入的, 现在要求读第三个和第五个学生的成绩, 修改学生成绩,并回写
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 }