c - 单个 printf() 函数是否可以在循环中从 getchar() 获取输入时执行多次?

标签 c gcc printf eof getchar

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

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

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

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

最佳答案

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

尝试查看 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”。

关于c - 单个 printf() 函数是否可以在循环中从 getchar() 获取输入时执行多次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54509393/

相关文章:

c - 使用 vsprintf 将字符串添加到另一种格式字符串的有效方法

go - 打印时如何取消引用字段?

c双向链表显示方法显示冗余元素

c - 为字符指针分配内存

c++ - 被 SIGKILL 杀死的进程

c++ - "Variable shadowed"lambda 中的警告(未捕获时)

c++ - 使用 std::cout 打印零填充十六进制

c - 扫描文件时C中的无限循环

c - 如何在C中创建unicode变量?

c++ - 使用 gcc 编译和使用 clang 编译代码时 undefined reference