验证空行的输入(\ n \ n)

时间:2012-04-27 01:02:46

标签: c

我需要编写一个从stdin读取的程序,只将非空行写入stdout(即只包含\ n的行)。例如,如果stdin是:

1

2

\n

3

输出结果为:

1

2

3

这是我到目前为止所做的:

#include <stdio.h> 
#include <string.h> 

int main()

{
    char buf[BUFSIZ];
    char *p;

    printf ("Please enter some lines of text\n");

    if (fgets(buf, sizeof(buf), stdin) != NULL)
    {
        printf ("%s\n", buf);
        /*
         *  Remove newline character
         */
        if ((p = strchr(buf, '\n')) != NULL)
            *p = '\0';
    }
    return 0;
}

有没有什么方法可以循环程序,所以即使输入一个空行,用户仍然可以继续输入?

4 个答案:

答案 0 :(得分:1)

这是家庭作业吗?

如果没有,grep会做你想做的事:

grep --invert-match '^$' yourfile

也就是说,匹配任何非行开头的行(^)紧跟行尾($)。

答案 1 :(得分:1)

因此,if语句用于一次代码块,您需要一个循环语句。你甚至可以使用相同的条件。还需要一些其他的小改动,但是一旦你弄清楚你需要什么类型的循环,你就应该在那里。

答案 2 :(得分:0)

如果你不一定只在C中这样做。然后,您可以使用UNIX和Perl来解决您的问题

<强>输入

1
2
\n
3

UNIX解决方案

$> grep -v '\n' Input

Perl解决方案

@text = `cat /home/Input`;
foreach my $no_only (@text)
{
        if ($no_only =~ /\d/)
        {
                print "$no_only\n";
        }
}

<强>输出

1
2
3

答案 3 :(得分:0)

#include <stdio.h>

int main(void){
    char buf[BUFSIZ];

    printf ("Please enter some lines of text\n");

    while(fgets(buf, sizeof(buf), stdin) != NULL){
        if(*buf != '\n')
            printf("%s", buf);
    }
    return 0;
}