我需要编写一个从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;
}
有没有什么方法可以循环程序,所以即使输入一个空行,用户仍然可以继续输入?
答案 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;
}