0

私はCプログラミングに不慣れで、何が見えるか、ばかげた疑いを明確にしたかった...

コード:

#define EOF 0
main()
{ 
    int c;

    c=getchar();
    while (c!= EOF) 
    {
        putchar (c); 
        c= getchar();
    }
}

これは私が入力した値を返すだけです...しかしそれに応じて...私が0を入力したときにそれは終了するべきではありませんか?そうでない場合...「while」の下のステートメントは正確に何を意味しますか?どんな助けでも大歓迎です:)

4

4 に答える 4

2

EOFたとえば、ctrl + dLinuxでヒットすると、EOFシグナルが送信されますが、必ずしも。である必要はありません0

于 2012-05-23T06:47:13.053 に答える
1

このgetchar関数は、入力された ASCII 値 (ゼロの場合は 48、または)、またはヘッダー ファイルで'0'呼び出された値(通常は -1) を返します。EOF<stdio.h>

したがって、EOF (定義した EOF ではなく、適切な EOF) で停止する場合、またはユーザーがゼロを書き込む場合、これははるかにうまく機能します。

#include <stdio.h>

int main()
{
    int c = getchar();

    while (c != EOF && c != '0')
    {
        putchar(c);
        c = getchar();
    }

    return 0;
}
于 2012-05-23T06:52:10.810 に答える
1

EOFは確かにそうではありません0( '0'48 に等しい char リテラルもそうではありません)。それはまったくありませんcharstdio.h(あなたがするべき#includeです!)はそれを として定義します-1。これは、読み取っているファイルにデータが含まれていないことを示しています。これはストリーム内のバイトではなく、io ライブラリが終了したことを示す方法です。

ファイル終了インジケータがファイル内の有効なバイトになる可能性がないように、全体の理由は isgetcharを返す必要があります。int

他の関数は、EOF に別の方法で到達したことを示しfgets()ますNULLread()これは読み取ったバイト数を返し、何も読み取れなかったことを示す 0 を返します。

于 2012-05-23T06:52:18.577 に答える
0

a を入力する0と、実際にはゼロではなく、ASCII 文字 0だけになります。これは 48 という数値を持ち、48printf("%d\n", '0');を出力する で確認できます。anEOF実際のゼロです。つまり、その表現は本質的にゼロです。

于 2012-05-23T06:52:19.997 に答える