一开尔文小宇 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条)

报告相同问题?

悬赏问题

  • ¥15 爬去app图片链接这是加密了吗 怎么解(语言-java)
  • ¥50 请教Windows server 2012 R2的DCOM配置问题
  • ¥15 adasis v3中LaneConnectivity
  • ¥20 jsp在SpringMVC框架中手动设置域对象失效的场景
  • ¥15 stc -isp烧录时显示通信超时
  • ¥15 VS2022的代码折叠加减号不见了怎么办?
  • ¥15 电脑登录粤政易软件,二维码一直空白,或账号密码登录提示服务器登录失败,是什么原因(相关搜索:防火墙)
  • ¥30 微博热门内容爬虫报错
  • ¥15 selenium获取非固定位置的元素
  • ¥50 手写签名不能上传的问题