1
#include <stdio.h>
main()
{
    int c ;
    while ((c = getchar()) != EOF)
    {
        int isEOF = (c==EOF);
        printf("is %c EOF: %d ", c, isEOF);
    }
}

ここで、入力文字ごとに printf() メソッドが 2 回呼び出されるのはなぜですか?

入力「a」を与えると、次のような結果が得られます

E:\C_workouts>gcc CharIO.c -o CharIO.exe

E:\C_workouts>CharIO.exe
a
is a EOF: 0 is
 EOF: 0

すべての入力で同じことが起こります。

4

3 に答える 3

1

getchar() の一部の実装では、キー「x」と ENTER を押すと、バッファーに 2 つの文字 (「x」と改行文字) が存在するためです。(私は知っています、これは少しばかげています) ループ内で改行をスキップする必要があります。

更新: これは既にここで回答されています: `getchar()` はユーザー入力をどこに保存しますか?

于 2010-03-31T00:59:34.933 に答える
-1

これはうまくいくはずです...

    int c ;
    while (((c=getchar())^EOF))
        printf("is %c EOF: %d ", c, c^EOF?0:1);
于 2010-03-31T01:53:02.510 に答える