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

时间:2019-12-03 14:42:59

标签: c eof getchar putchar

我一直在尝试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;
}
  

输入:-

     

a

     

预期输出:-

     

一个//Due to putchar()

     

-1 //Value of EOF

     

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

     

实时输出:-

     

a

     

-1

     

-1

     

//Cursor waiting for next character.

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

2 个答案:

答案 0 :(得分:1)

您的代码注释中说

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

但是第二个循环没有等待。它会读取已经输入的换行符,并在输出中以多余的空白行显示出来。

答案 1 :(得分:1)

在循环之前的第一个输入之后

c = getchar();

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

所以在while循环中会输出

a

-1

由于陈述

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

此循环后的语句

c = getchar();

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

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

输出

-1