#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()
忽略这些东西?
谢谢
您不仅键入 1。(我们知道这一点,因为在常见的用户界面中,按 1 键不会立即向程序发送“1”字符,除非做出特殊安排。)您可能会按 1 键和 Return 或 Enter 键。
当您按下1键时,字符“1”将被记录在缓冲区中。当您按下 Return 或 Enter 键时,将在缓冲区中添加一个换行符,然后将该缓冲区的内容发送到程序。
程序第一次执行
getchar
得到“1”字符。程序第二次执行 getchar
获取换行符。