首页 > 解决方案 > 单个 printf() 函数是否可以在循环中从 getchar() 获取输入时执行多次?

问题描述

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

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

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

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

标签: cgccprintfeofgetchar

解决方案


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

试试这个,看看 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”。


推荐阅读