从循环中从getchar()获取输入时,单个printf()函数能否多次执行?

时间:2019-02-04 02:09:14

标签: c gcc printf eof getchar

我期望getchar()!= EOF总是返回一个布尔值,该值将分配给'c',并且每次循环迭代的输出将为0或1,但是,我得到了多个输出用于单次输入。

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

对于 输入1, 输出是11 和为 输入-2, 输出为111。

什么原因可能导致它多次打印?

1 个答案:

答案 0 :(得分:1)

额外的输出是因为对于每个输入,行终止符都有一个附加字符。

尝试执行此操作,以准确查看getchar()对于每个输入所返回的内容:

#include<stdio.h>
int main()
{
    int c;
    while(1)
    {
      c = getchar();
      printf( "x%x\n", c );
      /* printf("%d\n",c = (getchar() != EOF)); */
    }
}

输入1时,您会得到两个字符,

x31
xa

键入-2时,您有三个字符,

x2d
x32
xa

由于以上都不是EOF,因此您将从例程中获得多个“ 1”。