1

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

4 に答える 4

1

これは宿題ですか?

そうでない場合、grepはあなたが望むことをします:

grep --invert-match '^$' yourfile

つまり、行頭 ( ^) の直後に行末 ( ) が続く行以外のすべての行に一致します$

于 2012-04-27T01:07:56.730 に答える
1

したがって、ifステートメントはコードの 1 回限りのブロック用であり、代わりにループ ステートメントが必要です。同じ条件でも使えます。他にも必要な小さな変更がいくつかありますが、必要なループの種類が分かれば、ほぼ完了です。

于 2012-04-27T01:29:45.240 に答える
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
于 2012-04-27T11:13:29.783 に答える
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;
}
于 2012-04-27T13:10:49.270 に答える