我想在一行中挤出多行。我试图运用自己的逻辑但是有些不对劲。
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命令的代码。
答案 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;
}