9

私は「Cプログラミング言語」を読み、CodeBlocksを使用してすべての演習を行っています。しかし、本から直接コピーしたにもかかわらず、キャラクターカウンターを機能させることができません。コードは次のようになります。

#include <stdio.h>

main(){
    long nc;

    nc = 0;

    while (getchar() != EOF)
        ++nc;
    printf("%ld\n", nc);
}

プログラムを実行すると、入力できるウィンドウが開きますが、Enterキーを押すと、1行スキップして入力を続けることができますが、文字数を出力することになっていると思います。

何が悪いのか分かりますか?

4

5 に答える 5

9

この行:

while (getchar() != EOF)

これは、行の終わりまでではなく、入力の終わりまで読み取りを続けることを意味します。(EOFは「ファイルの終わり」を意味する特別な定数です。)入力された文字の総数を確認するには、入力を終了する必要があります(おそらくCtrl-DまたはCtrl-Zを使用)。

于 2012-08-26T23:43:20.733 に答える
3

EOL(行末)で終了する場合は、EOFを「\n」に置き換えます。

#include <stdio.h>

main(){
    long nc;

    nc = 0;

    while (getchar() != '\n')
        ++nc;
    printf("%ld\n", nc);
}
于 2012-08-26T23:46:08.230 に答える
2

EnterはEOFではありません。OSに応じて、Ctrl-DまたはCtrl-Zが標準入力のEOFとして機能する必要があります。

于 2012-08-26T23:43:40.410 に答える
0

私も今夜問題にぶつかりました。最後に、Linux上のCtrl-Dが機能することがわかりました。ccを使用してソースファイルを作成し、プログラムを起動して単語を入力し、入力が終了したらCtrl-Dを2回押します。プログラムが打ち消した番号は、入力した単語のすぐ後ろに印刷され、プログラムはすぐに終了します。ちょうどこのような:ここに画像の説明を入力してください

于 2016-05-15T14:39:17.530 に答える
0

nujabseによって提供された上記の答えは正しいです。しかし、最近この問題に自分で遭遇し、答えを調査しているので、その理由を付け加えたいと思います。

Ctrl + Cを使用すると、端末にSIGINTを現在のフォアグラウンドプロセスに送信するように指示されます。これは、デフォルトではアプリケーションの終了に変換されます。

Ctrl + Dは、標準入力にEOFを登録する必要があることを端末に通知します。これは、bashが終了の要求として解釈します。

^Cと^Dの違いは何ですか

于 2020-11-03T05:35:20.340 に答える