我在C中有以下代码使用现有输入文件制作输入文件,但没有换行符:
int main()
{
int T;
char c;
FILE *fi,*fo;
fi=fopen("Square-practice.in","r");
fo=fopen("Square-practice-a.in","w");
fscanf(fi,"%d",&T);
fprintf(fo,"%d",T);
while(fscanf(fi,"%c",&c)==1){
if(c=='\n') printf("qwert");
else fprintf(fo,"%c",c);
}
return 0;
}
没有编译错误。
但是,输出文件与输入文件完全相同,包含换行符。 “qwert”打印8次(与文件fi中的换行符数相同)。那么为什么“其他”不起作用呢?
编译器是MinGW。
fi,fo文件都是here
答案 0 :(得分:1)
我认为你有'\ r \ n'而不是'\ n'。所以试试
int main()
{
int T;
char c;
FILE *fi,*fo;
fi=fopen("Square-practice.in","r");
fo=fopen("Square-practice-a.in","w");
fscanf(fi,"%d",&T);
fprintf(fo,"%d",T);
while(fscanf(fi,"%c",&c)==1){
if(c=='\n' || c=='\r') printf("qwert");
else fprintf(fo,"%c",c);
}
return 0;
}
答案 1 :(得分:0)
您还可以使用fgetc()
和fputc()
。在将每个字符传递到新文件之前,只需跳过任何\r
或\n
:
您的代码经过修改:
int main()
{
int T;
int iChr
char c;
FILE *fi,*fo;
fi=fopen("Square-practice.in","r");
fo=fopen("Square-practice-a.in","w");
//fscanf(fi,"%d",&T);
//fprintf(fo,"%d",T);
iChr = fgetc(fi)
while(iChr != EOF)
{
if((iChr =='\n')||(iChr =='\r')//skipping new file
{
printf("qwert");
}
else fputc(fo);//no \n or \r, put in new file
}
fclose(fi);
fclose(fo);
return 0;
}
答案 2 :(得分:-1)
我在我的Linux上运行此操作并且我正在获得我应该得到的内容:没有换行符号的同一文件和"qwert"
打印到stdout。如果您正在获得其他内容,则必须是CR / LF翻译的问题。请尝试分别用"r"
和"w"
替换"rt"
和"wt"
。
两条PS评论: