我写了以下代码:
#include<stdio.h>
void add_linebreak()
{
FILE *fp ;
char c, NEWL=10 ;
fp=fopen("text1.txt","a+") ;
if(fp==NULL)
{
printf("\nFile Not Found") ;
}
fseek(fp,0,SEEK_CURR) ;
while(!feof(fp))
{
//if(!feof(fp))
//{
c=fgetc(fp);
if(c==NEWL)
{
fprintf(fp,"%c",NEWL) ;
}
//}
}
fclose(fp) ;
}
int main()
{
add_linebreak() ;
printf("\nEditing Complete") ;
return 0 ;
}
该程序将以下数据作为来自名为text1.txt的文件的输入:
1 this 2 is 3 a 4 text 5 file 6 to 7 test a 8 program 9 written 10 in c
实际输出:
1 this 2 is 3 a 4 text 5 file 6 to 7 test a 8 program 9 written 10 in c 11
预期产出:
1 this 2 3 is 4 5 a 6 7 text 8 9 file 10 11 to 12 13 test a 14 15 program 16 17 written 18 19 in c 20
我在这个问题上摸不着头几个小时但是无法获得预期的输出,请帮助我。
答案 0 :(得分:1)
你必须复制文件
fgetc也返回int而不是char
void add_linebreak()
{
FILE *fin, *fout ;
char NEWL='\n' ;
fin=fopen("text1.txt","rb") ;
if(fp==NULL)
{
printf("\nFile Not Found") ;
}
fout = fopen("copy.txt","w");
while(1)
{
int c=fgetc(fin);
if(c==EOF)
break;
fprintf(fout, "%c", c);
if(c==NEWL)
{
fprintf(fout,"%c",NEWL) ;
}
}
fclose(fout) ;
fclose(fin);
}
将文件重命名为原始文件并添加更多错误处理作为测试: - )
答案 1 :(得分:0)
您可能无法就地执行修改。没有像文字这样的东西。
您必须从一个文件中读取,写入临时文件,然后重命名该副本以覆盖原始更新。
另一个答案说除了重命名之外几乎所有的东西。
哦,另一件事:我经常发现换行符往往会在旧的测试程序中被剥夺;这可能是另一回事。但原地修改是最可能的罪魁祸首。