c语言 修改指定坐标内容,修改指定文件中的内容

已结贴√

问题点数:8 回复次数:9

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

修改指定文件中的内容

求助各路大神,这是我写的代码,两个子函数功能都没能实现,求大神指点!

题目:

2.修改指定文件中的内容。

(1)将指定一行的内容全部替换为空格

(2)将指定一个字符串替换为传入指定的字符串

例如:将文件中的abc替换成1234

#include

#include

#include

void kongge();

void tihuan();

int main()

{

int a;

char c;

printf("1.将指定一行替换未空格\n");

printf("2.将指定一个字符串替换为指定的字符串\n");

printf("3.结束\n");

loop:

printf("输入相应的序号选择相应的功能:");

scanf("%c",&c);

if(c<='0'||c>'3')

{

printf("输入序号不对请重新输入\n");

goto loop;

}

switch(c)

{

case '1':kongge();break;

case '2':tihuan();break;

case '3':return 0;

}

}

void kongge()

{

FILE *fp;

char file[30],c,c1;

int a,b,num=0;

printf("请输入文件名字:");

scanf("%s",file);

fp=fopen(file,"a+");

if(fp==NULL)

{

printf("文件打开失败!\n");

exit(0);

}

else

{

printf("文件打开成功!\n");

printf("请输入要替换的行数:");

scanf("%d",&a);

for(;;)

{

c=fgetc(fp);            //向文件读取一个字符

if(c==10)

num++;              //每次读到换行符号时,num自加

if(a==num-1)         //当到了我们要的行数时,条件成立

{

fputc(' ',fp);              //向文件输入空格符号

c1=fgetc(fp);                 //读取下一个符号

fseek(fp,-1,SEEK_CUR);          //將文件指针往回偏移一个字节

printf("fp=%d\n",ftell(fp));           //检测指针偏移量

if(c1==10)                       //到了下一个换行符号时停止

break;

}

}

printf("替换完成!\n");

}

if(fclose(fp)==0)

{

printf("文件关闭成功!\n");

}

else

{

printf("文件关闭失败!\n");

}

}

void tihuan()

{

FILE *fp,*fp1;

char file[30],c[30],file1[30],c3,c4[30];

int i,n,num,loop=0;

printf("请输入读取文件名字:");

scanf("%s",file);//文件1名字

fp=fopen(file,"a+");

printf("请输入保存文件名字:");

scanf("%s",file1);//文件2名字

fp=fopen(file1,"a+");

if(fp==NULL)

{

printf("文件打开失败!\n");

exit(0);

}

printf("输入被替换的字符串:");

scanf("%s",c);

printf("输入要替换的字符串:");

scanf("%s",c4);

n=strlen(c);//算出字符串长度

char c1[n];

while(1)

{

for(i=0;;i++)

{

fgets(c1,n+1,fp);              //获取长度为n个字节的字符串,并且赋值给c1

printf("%d",ftell(fp));             //检测文件1指针是否偏移

if(strcmp(c1,c)==0)                   //判断两个字符串是否相等

{

num=ftell(fp);                       //获得文件1指针的偏移量

char c2[num+1];                        //定义一个足够长的字符串(此处可能不太好),指针偏移量大时,该数组太大

fgets(c2,num+2,fp);                   //从文件中获取num+1个字节的字符串赋值给c2

fputs(c2,fp1);                       //把c2的内容传到文件2中

fputs(c4,fp1);                         //把c4的内容也传进去

while(1)//用循环把文件1的内容传到文件2去

{

c3=fgetc(fp);

fputc(c3,fp1);

if(feof(fp)!=0)                //判断文件1的内容是否已经读取完毕

{

goto loop;

}

}

}

else                      //字符串不相等时执行此语句

fseek(fp,-(n-1),SEEK_CUR);

if(feof(fp)!=0)           //循环到此时证明文件1中没有c【】中的字符串

{

break;

}

}

}

loop:

printf("替换完毕!\n");

if(fclose(fp)==0)

{

printf("文件关闭成功!\n");

}

else

{

printf("文件关闭失败!\n");

}

}

[此贴子已经被作者于2018-7-13 21:30编辑过]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值