0

私はCとUbuntuを初めて使用します。whileとを使用して文字数を数える非常に簡単なプログラムを作成しgetchar()ました。プログラムは次のとおりです。

#include <stdio.h>

main()  {

    int i;
    int c= 0;

    while ( ( i = getchar() ) != EOF ){
        c++ ;
    }
    printf( "%d characters\n" , c) ;

    return 0;
}

保存して、を使用してコンパイルしましたgcc c1.c -o c1。エラーは報告されていません。を使用してプログラムを実行しました./c1。入力をdaniwebとして入力し、Enterキーを押しますが、カウントが表示されます。何が悪かったのか?無限ループですか?キーボードから入力がいつ与えられるかをどのようにgetchar()判断しますか?EOF

4

2 に答える 2

1

端末では、Ctrl+D を押して EOF をアプリケーションに送信できます。次のようなこともできます。

echo "blablub" | ./yourprogram

blablub に含まれる文字数を数えます。この場合、EOF は自動的に送信されます。

于 2012-07-20T16:09:17.527 に答える
1

Enter キーを押すと、EOF ではなく改行文字がプログラムに送信されます。他の人がすでに述べているように、Ctrl+D を使用して EOF を送信します。改行文字の読み取りを停止する場合は、while ループを次のように変更します。

while ( ( i = getchar() ) != '\n' ){
c++ ;
}
于 2012-11-28T17:45:09.150 に答える