每行后添加换行符

时间:2016-07-11 17:19:48

标签: c

我写了以下代码:

#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

我在这个问题上摸不着头几个小时但是无法获得预期的输出,请帮助我。

2 个答案:

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

您可能无法就地执行修改。没有像文字这样的东西。

您必须从一个文件中读取,写入临时文件,然后重命名该副本以覆盖原始更新。

另一个答案说除了重命名之外几乎所有的东西。

哦,另一件事:我经常发现换行符往往会在旧的测试程序中被剥夺;这可能是另一回事。但原地修改是最可能的罪魁祸首。