从C中的文本文件中删除换行符

时间:2016-08-19 09:36:43

标签: c

所以,我有一个如下所示的输入文件:

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;
}

3 个答案:

答案 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。