9

これが私のコードです。ターミナルを使用してubuntuで実行します。ターミナルで(a CtrlD) と入力すると、プログラムは停止せず、入力を待ち続けました。

CtrlDUNIX の EOF と等しくありませんか?

ありがとうございました。

#include<stdio.h>

main() {
    int d;
    while(d=getchar()!=EOF) {
        printf("\"getchar()!=EOF\" result is %d\n", d);
        printf("EOF:%d\n", EOF);
    }
        printf("\"getchar()!=EOF\" result is %d\n", d);
}
4

2 に答える 2

12

EOF は文字ではありません。は、入力の最後に達したとき、または何らかのエラーが発生したときに戻るEOFマクロです。getchar()^D「EOF文字」ではありません。行で ^D だけを押すと Linux で何が起こっているかというと、ストリームが閉じられ、getchar()呼び出しが入力の最後に到達してEOFマクロが返されます。^D行の途中で入力すると、ストリームは閉じられないためgetchar()、読み取った値が返され、ループは終了しません。

より良い説明については、C faqのstdioセクションを参照してください。

さらに:

最新のシステムでは、ファイルに格納されている実際のファイル終了文字は反映されません。これは、使用可能な文字がこれ以上ないことを示しています。

于 2012-08-14T01:20:46.267 に答える
6

EOF に関する Jon Lin の回答に加えて、あなたが書いたコードが意図したものであるかどうかはわかりません。getcharvariableから返された値を確認したい場合は、ステートメントを次dのように変更する必要があります。while

    while((d=getchar())!=EOF) {

これは、不等式演算子が代入よりも優先順位が高いためです。したがって、コードでdは、常にまたはのいずれ0かになります1

于 2012-08-14T01:27:19.213 に答える