getchar() 获取我使用 printf() 打印的内容

问题描述 投票:0回答:1
#include <stdio.h>

int main() {
  int c;
  for (int i = 0; i < 10; i++) {
    c = (getchar() != EOF);
    printf("%d\n", c);
  }
  printf("As we can see, the value of c is either 0 or 1 (as claimed in the "
         "book)\n");
  return 0;
}

我用 C 语言编写了这段代码,以表明

c = (getchar() != EOF)
要么是 0,要么是 1。但是,当我运行代码并输入 1 时,它会打印 1 两次。当我按
Ctrl-D
时,它会打印 EOF 字符,它只会为循环的剩余迭代打印 0。

因此,我尝试摆脱循环,并一次性运行循环内的代码,并且效果很好。我怀疑

getchar()
正在阅读我使用
printf()
打印的内容。如果是这样的话,我应该做什么才能让
getchar()
忽略这些东西?

谢谢

c printf getchar
1个回答
0
投票

您不仅键入 1。(我们知道这一点,因为在常见的用户界面中,按 1 键不会立即向程序发送“1”字符,除非做出特殊安排。)您可能会按 1 键和 ReturnEnter 键。

当您按下1键时,字符“1”将被记录在缓冲区中。当您按下 ReturnEnter 键时,将在缓冲区中添加一个换行符,然后将该缓冲区的内容发送到程序。

程序第一次执行

getchar
得到“1”字符。程序第二次执行
getchar
获取换行符。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.