7

「The C Programming Language」という本を読んでいて、式getchar() != EOFが 1 または 0 を返すことを確認するよう求められた演習があります。そうするよう求められる前の元のコードは次のとおりでした。

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

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

だから私はそれを次のように変更することを考えました:

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

    while (c != EOF)
    {
        printf("the value of EOF is: %d", c);
        printf(", and the char you typed was: ");

        putchar(c);
        c = getchar();
    }
}

そして本の答えは次のとおりです。

int main()
{
  printf("Press a key\n\n");
  printf("The expression getchar() != EOF evaluates to %d\n", getchar() != EOF);
}

私のやり方がうまくいかなかった理由を教えてください。

4

6 に答える 6

5

EOFの値を表示するには

#include <stdio.h>
int main()
{
   printf("EOF on my system is %d\n", EOF);
   return 0;
}

EOFはstdio.hで通常-1として定義されます

于 2013-01-09T12:34:52.690 に答える
5

if cis EOF、ループが終了するためです(または、入力された最初の文字にwhileすでにある場合は開始さえしません)。EOFループの別の反復を実行する条件は、cNOTです EOF

于 2013-01-09T12:32:05.617 に答える
3

EOF は、Unix では ctrl+d キー、Windows では ctrl+c キーを押すことで、キーボードからトリガーできます。

サンプルコード:

    void main()
    {
           printf(" value of getchar() != eof is %d ",(getchar() != EOF));
           printf("value of eof %d", EOF);
    }

出力:

[root@aricent prac]# ./a.out 
a
 value of  getchar() != eof is 1 value of eof -1
[root@aricent prac]# ./a.out 
Press    ctrl+d
 value of   getchar() !=  eof is 0 value of eof -1[root@aricent prac]# 
于 2014-02-10T12:18:33.777 に答える
-2

あなたのプログラムでは、標準入力から c = getchar(); として文字を読み取っています。

このようにして、押されたキーのASCII値を取得できます。これは決してEOFと等しくなりません。

EOF はファイルの終わりであるためです。

既存のファイルを開いてファイルから読み取ることをお勧めします。そのため、ファイルの終わり (EOF) に達すると、while ループが終了します。

本の答えは次のとおりです。

int main()
{
  printf("Press a key\n\n");
  printf("The expression getchar() != EOF evaluates to %d\n", getchar() != EOF);
}

プログラムを理解しようとすると、キーが取得されますが、これは EOF と等しくないため、常に「式 getchar() != EOF は 0 に評価されます」と出力する必要があります。

それが役に立てば幸い.......

于 2013-01-09T12:45:12.367 に答える