C语言如何用一行替换多行空行

How to replace multiple blank lines with a single line in C language

我想在一行中压缩多行。我尝试应用我自己的逻辑,但有些地方不对。

 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 命令开发代码。

在你的 if 块中:

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

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

第一个空白行数 = 1

第二个空白行数 = 2

我会颠倒那个逻辑

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

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

为什么要使用 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;
}