所以,我有一个如下所示的输入文件:
line1
line2
我想写这样的输出文件:
line1,line2
现在输出是这样的换行符:
line1,
line2,
如果我用\ n替换\ r,则输出将类似于输入。
这是我的代码:
int main()
{
/* Pointer to the file */
FILE *fp1;
FILE *fp2;
/* Character variable to read the content of file */
char c;
/* Opening a file in r mode*/
fp1= fopen ("Newfile.txt", "r");
fp2 = fopen ("result.txt","w");
/* Infinite loop –I have used break to come out of the loop*/
while(1)
{
c = fgetc(fp1);
if(c==EOF)
break;
else if(c=='\r')
fprintf(fp2,",");
else
fprintf(fp2,"%c", c);
}
fclose(fp1);
fclose(fp2);
return 0;
}
答案 0 :(得分:2)
您正在"文本模式"中阅读文件。这意味着运行时库会进行一些转换,特别是它会将CRLF(" \ r \ n")转换为LF(" \ n")。您的代码永远不会看到'\r'
。
选项1:用逗号替换'\n'
选项2:以二进制模式打开文件:fopen("foobar", "rb")
答案 1 :(得分:0)
您可以使用fgets
,然后使用\n
将,
替换为strchr
:
char str[512], *p;
...
while (fgets(str, sizeof str, fp1)) {
p = strchr(str, '\n');
if (p != NULL) {
*p = ',';
}
fprintf(fp2,"%s", str);
}
答案 2 :(得分:0)
EOF值不用于标准文件。它用于数据传输。你需要实际上打电话给feof。