2

それは基本的な質問です..しかし、尋ねなければなりませんでした。このようなプログラムの場合、ユース ケースが 123^Z の場合、最後に EOF を入力しても (Ctrl+Z)、プログラムは終了しません。どうしてこんなことに?それが機能するのは、CRの後にEOFを置いたときだけです。任意の回答をいただければ幸いです。ありがとう。

#include < stdio.h>

void main()
{
    int i, nc;

    nc = 0;
    i = getchar();
    while (i != EOF) {
        nc = nc + 1;
        i = getchar();
    }
    printf("Number of characters in file = %d\n", nc);
}
4

1 に答える 1

7

Windowsでは、Ctrl-Zショートカットは、行の先頭で押された場合にのみ有効になります。それ以外の場合、OSはそれを無視します。最初に改行文字を挿入するには、「Enter」または「Return」を押す必要があります。

Unixでは、Ctrl-Dショートカットはstdinすぐにフラッシュされますが(以下のコメントで説明されているように)、新しい空白行がない限りgetchar()、戻ることはありません。EOFWindowsと同じです。

コメント(下記)から:

Unixには「EOF文字」はありません。EOFは、単に長さがゼロの読み取りです。これは通常のファイルの最後で発生し、EOFの端末設定(通常は^ D)で設定されている制御文字を押すことで端末に強制できます。ターミナルバッファが空でないときに^Dが「機能しない」理由は、実際にはストリームに何かを挿入しないためです。保留中の読み取りが返されるだけですが、入力の長さがゼロ以外であるため、アプリケーションでは「EOF」として扱われません。

これは良い点に対処します-実際にはファイルが含まれてい ません-そしてCtrl-Dを押しても(前に言ったように)ストリームEOFに何も「挿入」されません。フラッシュするだけstdinです。 標準関数がファイルの終わりに到達したという通知を表す標準マクロです。stdinEOF

@Rに感謝します。についての説明のためEOF

于 2012-03-20T22:52:40.557 に答える