2012-04-27 14 views
1

stdinから読み込み、空でない行だけをstdout(つまり\ 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

私はあなたのプログラムがあなたの記述と一致するかわからない(プログラムは文法問題を抱えているので、それは何がしたいこと、それはあるかもしれないようなプログラムが見えるものであるかどうかを知ることは困難ですあなたが何を質問に入れているか)。最大の混乱を招くのは、プログラムが1行のテキストしか読んでいないように見えるので、複数の '\ n'を読み込む機会はあまりありません。 –

+0

宿題のように聞こえます。私の前提が正しければ、あなたの投稿を編集して '宿題'タグを含めるようにしてください。 – Till

+0

ありがとうございます - 私は宿題タグを含めました。 – SeekingCharlie

答えて

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ステートメントは1回限りのコードブロック用です。代わりにループステートメントが必要です。あなたは同じ条件を使うことさえできます。あなたが必要とするいくつかの小さな変更もありますが、必要なループのタイプを見つけたら、ほとんどがそこにいるはずです。

+0

私はそれが理想的ではないことを知っています。私は自分自身で答えを見つけ出すことになっていますが、解決策を見せることはできますか?私はK&Rの本とおそらくすべての関連するCの記事をオンラインで読みましたが、私の人生のために、これを行う正しい方法を見つけ出すことはできません。 – SeekingCharlie

0

あなたはC言語でのみ行うことになっていない場合。その後、あなたはあなたの問題を解決するために

入力

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"; 
     } 
} 
をUNIXやPerlを使用することができます

出力

1 
2 
3 
関連する問題