使用 "getchar()" 和 "EOF" 期间无意义的输出流

Nonsensical output stream during the usage of "getchar()" and "EOF"

我一直在试验 getchar()putchar() 并且一直在尝试使用 EOF。下面是我一直在试验的代码片段。

#include <stdio.h>

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

    while(c != EOF)
    {
        putchar(c);
        printf("\n");
        printf("%d\n", EOF);
        c = getchar();
    }

    return 0;
}

Input: -

a

Expected output: -

a //Due to putchar()

-1 //Value of EOF

//Now the cursor should come in next line and wait for next character.

Output getting in real time: -

a

-1

-1

//Cursor waiting for next character.

我无法理解输出显示 -1 两次的原因。

你的代码注释说

//Now the cursor should come in next line and wait for next character.

但是第二个循环不等待。它读取已经输入的换行符,这由输出中的额外空白行显示。

循环前第一次输入后

c = getchar();

输入缓冲区包含对应于按下的 Enter 键的换行符 '\n'

所以在while循环中有输出

a

-1

由于声明

printf("%d\n", EOF);

之后这个语句在循环中

c = getchar();

读取输入缓冲区中存在的换行符。所以再次声明

printf("%d\n", EOF);

产出

-1