5

「The C Programming Language」を読んでいて、入力と出力のこの部分にたどり着きました。

コンソールが enter を として認識しないという他のスレッドを読みましたEOF。そのため、Windows では+を、UnixではCTRL+を使用する必要があります(どちらも機能していません)。ZCTRLD

私はまた、他の人がそれを機能させることができると同じことを尋ねているのを読みました.彼らのコードの問題は、プログラムが終了しないのではなく、構文でした.

別の解決策はありますか?

これはコードです:

#include <stdio.h>
main()
{
    int nb, nl, nt, c;
    nb = 0;
    nl = 0;
    nt = 0;
    while ((c = getchar()) != '\n'){
        if (c == ' ')
            ++nb;
        else if (c == '\n')
            ++nl;
        else if (c == '\t')
            ++nt;
    }
    printf("Input has %d blanks, %d tabs, and %d newlines\n", nb, nt, nl);
}

編集:\nは EOF であるはずでした。投稿する前にいじっていて、変更したことを忘れていました:P

EOF でも機能しません。スキップしました。

4

8 に答える 8

4
while ((c = getchar())  !=EOF) {


}

次に、Ctrl+ZまたはF6Windows で使用します。

以下は、最初に来るa\nまたはのいずれかを待ちますEOF

while((c = getchar()) != '\n' && c != EOF){

}
于 2013-09-02T04:39:29.537 に答える
4

Windows ではCtrl-Z、行を単独で (スペースなどを入れずに) 入力し、Returnその後に を入力します。Windows では、技術的には EOF インジケーターをスキップして文字を読み続けることができますが、EOF は実際には EOF を意味するため、これは他のオペレーティング システムには当てはまりません。

于 2013-09-03T02:00:36.633 に答える
1
    /* This program will calculate the number of blanks, tabs and new line in a text stream */

#include <stdio.h>

main () 
{
    int c,nl = 0, blank = 0, tab = 0; //Newline, blanks and tabs.
    while ((c = getchar()) != EOF) {
        if (c == '\n')
            ++nl;
        else if (c == '\t')
            ++tab;
        else if (c == ' ')
            ++blank;
}
    printf("Tabs = %d\nBlanks = %d\nNewLine = %d",tab, blank, nl);
}

この次のコードを書きましたが、Ubuntuで正しく動作します。書かれている内容と似ているので、コードを試してみたところ、UNIX で Ctrl-D が正常に動作しています。

次のコードをテストしたところ、テキスト ストリームに \n を入力しても新しい行のカウンターが増加しないことがわかりました。\t タブについても同様です。Enter キーを押して改行し、Tab キーを押してタブを押すだけがカウンターでカウントされます。これは注意すべき点です。

これは、Enter キーを押すと実際には 1 文字の改行文字が入力されるのに対し、\n の入力は異なるものとして扱われ、実際には 2 文字であるために発生します。

これがこの質問に価値を与えると思ったので、このことも説明しました。ありがとう。

于 2017-10-13T18:35:11.980 に答える
0

行を変更する

// Buggy, you want calculate the # of '\n' in loop body,
// so logically you shouldn't use it as a stop condition.
while ((c = getchar()) != '\n')

while ((c = getchar()) != EOF)

Ctrl + Cそして、Windows のコンソール ウィンドウを押してみてください。Win7 を実行している私のプラットフォームで動作します。

ここに画像の説明を入力

于 2013-09-02T04:36:15.653 に答える
0

最初にCtrl+Zを 押して^Zを出力し 、次に押し Enter て EOF に移動します。

于 2014-05-18T15:23:39.347 に答える
-2

Turbo C++ で EOF を認識するには、ターミナル ウィンドウでCtrl+を押しzます。これはプログラムでEOFとして機能し、プログラムを終了します....次の条件で:

while ((c = getchar()) != EOF) 
于 2017-01-15T03:34:48.347 に答える