如何用C语言中的单行替换多个空行

时间:2015-03-17 01:19:41

标签: c linux unix cat

我想在一行中挤出多行。我试图运用自己的逻辑但是有些不对劲。

 char *p;
                    linecount=0;
                    while (fgets(buffer, sizeof(buffer), file))
                    {

                    //it will print the user input with number
                    p=buffer;

                    if('\r' == *p ||'\n' == *p )
                    {

                        linecount++;
                       if(linecount>2 )
                        printf("\n");
                    }

                    else
                    {
                        linecount=0;
                             printf("\t %s", p);

                    }

例如,文件包含

之类的行
a
b


c


d
e

然后输出应该是

a
b

c

d
e

基本上,我正在开发cat -s命令的代码。

2 个答案:

答案 0 :(得分:2)

在你的if块中:

if(linecount>2 )
    printf("\n");

你正在做的是打印出第3,第4,第...个空行。

第一个空白就像是linecount = 1

第二个空白就像linecount = 2

我会反驳这种逻辑

if( linecount == 0 ){
    linecount++;
    printf("\n");
}

这样,您只会打印换行列表中的第一个空白行。

答案 1 :(得分:0)

你为什么要使用fgets? (更重要的是,为什么不处理比缓冲区大的行?)你只需要一次查看一个字符:

#include <stdio.h>

int main(void) {
    int c;
    int count=0;
    while((c=getchar())!=EOF) {
        if(c=='\n'){
            if(++count>2)
              continue;
        } else {
            count=0;
        }
        putchar(c);
    }
    return 0;
}