2012-04-27 82 views
1

我需要編寫一個程序,它從stdin讀取並且只寫入非空行到標準輸出(即只包含\ n的行)。例如,如果標準輸入是:驗證空行輸入( n n)

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; 
} 

有什麼辦法,我可以循環該程序雖然,所以即使輸入一個空行,用戶仍然可以繼續輸入?

+2

我不知道你的程序的說明相匹配(而且由於程序有語法問題,就很難知道,如果你想要的是該程序的樣子可能是做或你在問題中所做的)。最令人困惑的是,該程序似乎只讀過一行文字,因此沒有多少機會可以讀入多個'\ n'。 – 2012-04-27 01:09:18

+0

聽起來很像作業。如果我的假設是正確的,請繼續編輯您的帖子以包含'家庭作業'標籤。 – Till 2012-04-27 01:15:09

+0

謝謝 - 我已經包含一個作業標籤。 – SeekingCharlie 2012-04-27 01:24:01

回答

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; 
} 
1

這是功課嗎?

如果沒有,grep的會做你想要什麼:

grep --invert-match '^$' yourfile 

也就是說,匹配不啓動線(^)的任何行之後緊接着線($)結束。

1

因此,if語句是針對一段代碼,您需要一個循環語句。你甚至可以使用相同的條件。還有一些你需要的小改動,但是一旦你弄清楚你需要什麼類型的循環,你應該主要在那裏。

+0

我知道這並不理想,我本應該自己找到答案,但是有什麼方法可以讓我看到解決方案嗎?我已經閱讀過K&R書以及可能的在線相關C文章,但對於我的生活,我仍然無法找到正確的方法來完成這件事。 – SeekingCharlie 2012-04-27 03:21:06

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