高手帮忙看看这道c语言题,我实在想不出为什么结果不对
我编了一个程序,目的是把一个文件中的特定字符组合替换成其他字符串,和进行一些修改(如当遇到Son组合时把它后面和';'前的字符串括在括号中存入新的文档),并存入里一个文件...
我编了一个程序,目的是把一个文件中的特定字符组合替换成其他字符串,和进行一些修改(如当遇到Son组合时把它后面和';'前的字符串括在括号中存入新的文档),并存入里一个文件中,可是程序识别了“Son”后就不再向文件中写字符了,我想了三天也没向明白,谁知道这是怎么回事啊?那里错了,本来只有d=-1情况时程序可以得到正常结果,可当我加了d=-2时,也就是比d=-1时多加了个for循环就不能得到正常结果了,这是为什么啊???在线等
#include"stdio.h"
void writejava(int a);
void string(int a);
char*finishpath;
char*memory;
main()
{
FILE*fp;
char*filename="aa";
char b,f,c;
int d,e,i;
printf("please enter the path of the file: ");
scanf("%s",filename);
printf("ok~plesase enter the path of file finished");
scanf("%s",finishpath);
fp=fopen(filename,"r");
b=fgetc(fp);
f=fgetc(fp);
do{
d=0;
c=fgetc(fp);
if(b=='B'&&f=='u'&&c=='f')
d=-1;
if(b=='S'&&f=='o'&&c=='n'){
d=-2;
for(i=0;;i++)
{
if((c=fgetc(fp))==';')
break;
memory[i]=c;
}
memory[i]='\0';
}
if(d!=0){
writejava(d);
f=fgetc(fp);
c=fgetc(fp);
}
else{
e=b;
writejava(e);
}
b=f;
f=c;
}while(c!='@');
fclose(fp);
printf("ok");
}
void writejava(int a)
{
char c;
char*c1;
FILE*p;
p=fopen(finishpath,"a+");
if(a>=0)
{
c=a;
fputc(c,p);
}
fclose(p);
if(a<0)
string(a);
}
void string(int a)
{
char*c[30];
FILE*f;
f=fopen(finishpath,"a+");
c[1]="\");";
c[2]="System.out.println(\"";
c[3]="BufferedReader(new InputStreamReader(System.in))";
if(a==-1)
fputs(c[3],f);
if(a==-2){
fputs(c[2],f);
fputs(memory,f);
fputs(c[1],f);
} fclose(f);
}
filename是要修改的文件的路径
finishpath是完成修改后的文件的存储路径
要修改的文件是:
hello Buf good Son everyone; morning@
我把要修改的文件简化成一行文本了 展开
#include"stdio.h"
void writejava(int a);
void string(int a);
char*finishpath;
char*memory;
main()
{
FILE*fp;
char*filename="aa";
char b,f,c;
int d,e,i;
printf("please enter the path of the file: ");
scanf("%s",filename);
printf("ok~plesase enter the path of file finished");
scanf("%s",finishpath);
fp=fopen(filename,"r");
b=fgetc(fp);
f=fgetc(fp);
do{
d=0;
c=fgetc(fp);
if(b=='B'&&f=='u'&&c=='f')
d=-1;
if(b=='S'&&f=='o'&&c=='n'){
d=-2;
for(i=0;;i++)
{
if((c=fgetc(fp))==';')
break;
memory[i]=c;
}
memory[i]='\0';
}
if(d!=0){
writejava(d);
f=fgetc(fp);
c=fgetc(fp);
}
else{
e=b;
writejava(e);
}
b=f;
f=c;
}while(c!='@');
fclose(fp);
printf("ok");
}
void writejava(int a)
{
char c;
char*c1;
FILE*p;
p=fopen(finishpath,"a+");
if(a>=0)
{
c=a;
fputc(c,p);
}
fclose(p);
if(a<0)
string(a);
}
void string(int a)
{
char*c[30];
FILE*f;
f=fopen(finishpath,"a+");
c[1]="\");";
c[2]="System.out.println(\"";
c[3]="BufferedReader(new InputStreamReader(System.in))";
if(a==-1)
fputs(c[3],f);
if(a==-2){
fputs(c[2],f);
fputs(memory,f);
fputs(c[1],f);
} fclose(f);
}
filename是要修改的文件的路径
finishpath是完成修改后的文件的存储路径
要修改的文件是:
hello Buf good Son everyone; morning@
我把要修改的文件简化成一行文本了 展开
1个回答
展开全部
没仔细看程序,只看了开头,发现了一个初学者常犯的错误,就是char *变量没有正确地赋初值。char *filename="aa";的话,filename指向的是静态变量"aa",接下来再scanf的话,就是向静态数据区写数据,会发生不可预知的错误;而且finishpath也没有赋初值。建议filename和finishpath都声明为char [256];因为路径长度不会超过255。
另外,从文件中读字符串可以用fscanf,可以一次读出"Buf","Son"这样的字符串。
另外,从文件中读字符串可以用fscanf,可以一次读出"Buf","Son"这样的字符串。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询