一开尔文小宇 2021-03-11 20:34 采纳率: 100%
浏览 62
已采纳

<C语言>文件内容究竟如何进行修改?(含例题)

 例题如下:

 

#include  <stdio.h>
#define    N  5
typedef struct  student {
  long  sno;
  char  name[10];
  float  score[3];
} STU;

void fun(char  *filename, long  sno)
{ FILE  *fp;
  STU  n;      int  i;
  fp = fopen(filename,"rb+");
  while (!feof(fp))
  {  fread(&n, sizeof(STU), 1, fp);
     if (n.sno==sno)  break;
  }
  if (!feof(fp))
  {  for (i=0; i<3; i++)  n.score[i] += 3;
    fseek(fp, -(long)sizeof(STU), SEEK_CUR);
    fwrite(&n, sizeof(STU), 1, fp);
  }
  fclose(fp);
}

main()
{ STU  t[N]={ {10001,"MaChao", 91, 92, 77}, {10002,"CaoKai", 75, 60, 88},
             {10003,"LiSi", 85, 70, 78},  {10004,"FangFang", 90, 82, 87},
             {10005,"ZhangSan", 95, 80, 88}}, ss[N];
  int  i,j;      FILE  *fp;
  fp = fopen("student.dat", "wb");
  fwrite(t, sizeof(STU), N, fp);
  fclose(fp);
  printf("\nThe original data :\n");
  fp = fopen("student.dat", "rb");
  fread(ss, sizeof(STU), N, fp);
  fclose(fp);
  for (j=0; j<N; j++)
  {  printf("\nNo: %ld  Name: %-8s      Scores:  ",ss[j].sno, ss[j].name);
     for (i=0; i<3; i++) printf("%6.2f ", ss[j].score[i]);
     printf("\n");
  }
  fun("student.dat", 10003);
  fp = fopen("student.dat", "rb");
  fread(ss, sizeof(STU), N, fp);
  fclose(fp);
  printf("\nThe data after modifing :\n");
  for (j=0; j<N; j++)
  {  printf("\nNo: %ld  Name: %-8s      Scores:  ",ss[j].sno, ss[j].name);
     for (i=0; i<3; i++)  printf("%6.2f ", ss[j].score[i]);
     printf("\n");
  }
  getchar();
}
  • 写回答

2条回答 默认 最新

  • 小白小白你好菜 2021-03-12 00:07
    关注

    我不知道题主啥时候回复我,我先说说我的思路,用“rb+"打开目的文件,比较学号,找到指定学号学生,用ftell(fp)获取当前文件指针位置。然后fseek(fp,前面获得的位置,0),此时fp到了对应学号数据的地址,在前一个学号数据的末尾,然后fwrite()函数把你的数据写进去就可以了。fseek一定不能少,你读取之后直接用写的话,文件指针从头开始了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!