问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言 文件读写

发布网友 发布时间:2022-04-26 00:29

我来回答

5个回答

热心网友 时间:2023-10-24 19:26

#include <stdio.h>

#include<string.h>

typedef struct

{

 char a[20];

 char b[20];

 char c[20];

 int  d;

}node,*link;

static int len;

void insert()

{

  FILE* fp;

  int num;

  fp=fopen("A.txt","w");

  printf("输入记录个数:");

  scanf("%d",&num);

  len=num;

  while(num)

  { 

   link nlink=new node[sizeof(node)];

   printf("input a string:");

   scanf("%s",nlink->a);

   printf("input b string:");

   scanf("%s",nlink->b);

   printf("input c:string:");

   scanf("%s",nlink->c);

   printf("input d:int:");

   scanf("%d",&nlink->d);

   getchar();

   fwrite(nlink,sizeof(node),1,fp); 

   num--;

  }

  fclose(fp);

}

void show()

{

 FILE* fp;

 fp=fopen("A.txt","r");

 link abc=new node[sizeof(node)];

 fread(abc,sizeof(node),1,fp);

 int num=len;

 while(num)

 {

  printf("%s %s  %s %d\n",abc->a,abc->b,abc->c,abc->d);

  fread(abc,sizeof(node),1,fp);

  num--;

 }

 fclose(fp);

}

void add()

{

 FILE* fp;

 int offset=0; 

 int flag=0;

 int sum=0;

 fp=fopen("A.txt","a+");

 printf("输入添加记录:\n");

 link nlink=new node[sizeof(node)];

 printf("input a string:");

 scanf("%s",nlink->a);

 printf("input b string:");

 scanf("%s",nlink->b);

 printf("input c:string:");

 scanf("%s",nlink->c);

 printf("input d:int:");

 scanf("%d",&nlink->d);

 sum=nlink->d;

 //getchar();

 int num=len;

 link abc=new node[sizeof(node)];

 fread(abc,sizeof(node),1,fp);

 while(num)

 { 

 

  if (strcmp(nlink->a,abc->a)==0 && strcmp(nlink->b,abc->b)==0)

  {

   

   flag=1;

  }

   fread(abc,sizeof(node),1,fp);

  num--;

 }

 if (flag==0)

 {

  len++;

  fwrite(nlink,sizeof(node),1,fp); 

 }

 else

 {

  fclose(fp);

  fp=fopen("A.txt","w+");

  num=len;

  fread(abc,sizeof(node),1,fp);

  while(num)

  { 

   if (strcmp(nlink->a,abc->a)==0 && strcmp(nlink->b,abc->b)==0)

   {

    abc->d+=nlink->d;

      fwrite(abc,sizeof(node),1,fp);

   }

   fread(abc,sizeof(node),1,fp);

   num--;

  }

 }

 fclose(fp);

}

void main()

{

 insert();

    show();

 add();

 show(); 

热心网友 时间:2023-10-24 19:27

#include "stdio.h"
#include <string.h>
int main(int argv,char *argc[]){
char a[3][10],b[3][10];
int x,y,f=0,n,t;
FILE *fp;
if((fp=fopen("A.txt","r+"))==NULL){
printf("Open the file failure,exit...\n");
return 0;
}
printf("Please enter the information to modify:\n");
scanf("%s%s%s%d",b[0],b[1],b[2],&y);
while(fscanf(fp,"%s%s%s%d",a[0],a[1],a[2],&x)==4){
if(!strcmp(a[0],b[0]) && !strcmp(a[1],b[1]) && !strcmp(a[2],b[2])){
for(n=0,t=x;t;t/=10,n++);
fseek(fp,-n,1);
fprintf(fp,"%d",x+y);
f=1;
break;
}
}
fclose(fp);
if(f==0)
printf("Didn't find relevant information...\n");
return 0; 
}

运行样例:

文件之前内容和之后内容

注:办法不少,这是之一……

热心网友 时间:2023-10-24 19:27

如果说你知道应该更改哪一条记录的话,可以直接用fseek函数定位文件指针到那个位置,然后fscanf取该记录,将其加上15后再次fseek定位这个位置然后fprintf写到该位置即可。
至于对文件的读写到底是用fscanf fprintf还是fread fwrite取决于你这个文件最初的写入方式,假如你的文件开始用的是第一组写入的,那读的时候也要用第一次,而假如写入的时候是第二组,那读的时候也应该是第二组。一般来说ascii文件用fscanf fprintf来读写,二进制文件用fread fwrite来读写
再有,你可能不知道到底要改哪条记录,我看你描述的意思好像是说要通过比较看哪组相同再往上加,这样的话你不必用fseek了,直接把文件内容全读到内存中来,然后依次比较它它们的值看哪些相同再做修改,修改后再重新写到文件中去。追问哎?是说fprintf写入的必须用fscanf读么?无论写入方式是w还是wb?

热心网友 时间:2023-10-24 19:28

比如已有文件A,它由结构体数组写入。假设结构体数组为4项,前三项是char xxx[20],最后一项是int型。===》描述不清。
文件,是存放到硬盘中的一些 数据,是要专门的函数打开和关闭的。
数组,是存放到内存中的一些 数据。
如果仅仅是数组中的数字,循环比较找到位置后,进行增、删、改。
那么,也就是计算偏移、数组遍历之类,就能获得了。追问这个主要是强调送入文件的数据的结构。用的是fscanf写入的啊。

追答建议,做作业,还是自己看书(比如谭浩强的)或者看源代码,比较给力。

热心网友 时间:2023-10-24 19:28

可以用seek。 因为类型已只,可以计算偏移获得。
当然也可以读入所有的数据,然后进行遍历获得追问您最好能具体些。fseek不太会用。而且文件的打开方式具体用哪个?

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
父母离异的话,会不会导致孩子心智不成熟? 过节 公司给我们发的购物卡 这个怎么做分录 属于福利费吗 需要计提吗... 乡村振兴公务员和省考公务员有什么区别 ...小时候跟着爷爷学国画书法,小受家是农村的,小受姓夏或叶,他带着他... 瑞麒X1安全装置 瑞麒X1的舒适型和豪华型有什么区别?配置有哪些不同的地方?这5000块多在... 瑞麒X1的安全性能方面配置如何? 脚崴了 有大量於血 怎么样才能快速消肿 脚崴了外侧出现瘀血浮肿怎么消除? ...换了我喜欢的发型,但是穿了件有点透明的衣服,可以看到肩_百度... 祝福12岁男孩生日的句子 节日怎么给潜在客户发短信呢 同学孩子12岁生日祝福语 c++如何进行文件读写操作 关于文件的读写问题 儿子12岁生日对他说的话 同学12岁生日祝福语,男短点儿,普通些 给需要装修房子的潜在客户发短信 C语言 文件的读写 对12岁同学的祝福语? 如何跟潜在客户沟通? 微信怎样进行短信群发? java实现文件的读写,是叫啥? 在C++中如何实现文件的读写? 关于文件的读写!!! 如何跟自己陌生的潜在客户聊天呢 感觉没什么可聊的 把天都聊死了 怎么给潜在客户发信息,内容该怎么写 新浪邮箱可以注销掉吗?我想换个名 如何传递信息给潜在客户 如何注销新浪邮箱和新浪微博? 我有一个闲置的免费新浪邮箱,不想用... 同学12岁生日祝福语,男 淘宝店开张怎么在潜在客户微信群里发消息 C语言的文件读写 如何开发潜在客户 圆锁开锁:一开,聪明伶俐 ;二开,学业有成;三开,满堂富贵……后面是什么?急急急。谢谢谢…… 如何发短信给潜在客户 男同学过12岁生日应该说什么祝福语? 农村路灯坏照哪个部门, 恩捷股份股票代码 新店开业给新老顾客发信息怎么发 祝同学十二圆锁生日祝福语 修村里路灯走平台需要什么手续 恩捷股份为什么一路下跌?2021年恩捷股份业绩预测?恩捷股份(002812)? 同事离职,我该怎么给接过来的潜在客户发邮件 给男同学的12岁生日贺词 同学过12岁生日,怎样用英语说祝贺词呢? 服装店到新货怎样给顾客发短信 恩捷股份为什么涨不起来? 店铺来新款了,怎么给顾客发短信呢? 佳能5140无线手机电脑显示屏双进纸自动双面打印机如何复印身份证?