1

EOF の動作を理解するために、次のプログラムを作成しました。

#include<stdio.h>

int main ()

    char c = 0;

    printf("Enter some chars, EOF stops printing:");

    while ((c == getc(stdin)) != EOF) 
        printf("c = %c, (int) c = %d\n", c, (int) c);

    return 0;
}

ただし、次のようなものを入力すると、次のabcd出力が得られます。

c = a, (int) c = 97
c = a, (int) c = 97
c = a, (int) c = 97
4

2 に答える 2

7

==の代わりに持っているので、返品=を保存することはありません。getc

while ((c == getc(stdin)) != EOF) {
          ^^

そしてもちろん、ではなく、でcある必要があります。intchar

于 2012-08-27T13:48:44.303 に答える
1

ドキュメントをよく読む必要があります。に収まらないため、をgetc()返します。intEOFchar

また、との両方scanf()を使用しgetc()ているため、入力ストリームのバッファリングが原因で混乱が生じます。

次のようなものを試してください。

#include <stdio.h>

int main()

    int c = 0;

    printf("Enter some chars, EOF stops printing:");
    while ((c = getc(stdin)) != EOF) {
        printf("c = %c, (int) c = %d\n", c, c);
    }
    return 0;
}

また、コードに欠落しているものを追加し、の呼び出しで}のキャストを削除しました。これは、現在は必要ありません。ちなみに、これはフォーマット指定子にも適切なタイプです。cprintf()cint%c

于 2012-08-27T13:47:59.910 に答える