1

私は「Cプログラミング言語(第2版)」を読んでいて、冒頭近くに次のような例があります。

while((c = getchar()) != EOF)
    if(c == '\n'){
        ++n1;

ファイルからの読み取り中にこれがどのように機能するかを確認でき、この構文を理解しています...しかし、これはコンソールからの読み取りにすぎません。コンソールから文字を入力するときに、ファイルの終わりをどのように通知するのでしょうか。私はWindowsXPを使用しています...MinGWコンパイラ...とにかく、この本はEOFボタンなどを備えた以前のシステム用に書かれていましたか?

アップデート

さて、もう1つ質問があります。それは、Windowsでのファイルの終わりの動作に関連しています。

、だけwhile(getchar()!=EOF);の場合は、^ Zを介してEOFを通知するまで、文字を入力し続けることができます。しかし、私は改行を書き、次に^ Zを押し、次に別の改行を押す必要があります...なぜそれはそれ自身の行になければならないのですか?

4

4 に答える 4

7

WindowsはEOFにCtrl-Zを使用し、UNIXはCtrl-Dを使用します。http://bytes.com/groups/c/217873-eof-windows、および優れた本の選択を参照してください。:)

于 2009-05-20T08:31:03.657 に答える
4

^ZはEOFです。

于 2009-05-20T08:30:28.133 に答える
3

正解はすでに示されていますが、一般的な使用法は、ファイルを標準出力にリダイレクトすることです。

program.exe < samplefile.txt

samplefile.txt標準出力に「書き込まれ」program.exe、EOFに達するまでこれを標準出力から読み取ります。

于 2009-05-20T08:40:25.917 に答える
1

^ Zに関する質問に関して、このように動作する理由は、実際には文字ではなく、オペレーティングシステムからC入力システムへの信号であるためです。そのため、OSとC入力システムのバッファリング間の相互作用に大きく依存します。これは、Windowsや特定のC実装にとって、物事が機能する方法であると言うための空想的な言い方です。

于 2009-05-20T09:10:25.433 に答える