与当前代码混淆。 在Uni学习,目前正在通过Brian W. Kernighan的 C编程语言(第2版)
现在我已经编程了好几年,主要是用C ++和一些java编写的,但是并没有真正使用C语言,而且有些东西真的让我烦恼。
因此,本书中的练习1-6希望您证明getchar()
所读取的字符可以是1
或0
现在我完全理解它会读取缓冲区中的char并检查它是否不是EOF
,如果是,则返回1
else 0
这意味着,如果我输入a
并按Enter键,则会显示a
并输入并返回1,1
此外,如果我使用CTRL+D
,则返回0
,因为它会导致EOF
。我遇到的问题以及我无法理解逻辑的地方是:当我输入aa Ctrl+D
时,
我阅读它的方式应该是1,1,0
,因为它会读取a,a
然后EOF
,但它似乎打印1,1
然后等待下一个输入。
为什么会这样?
这是我到目前为止编写的代码。
#include <stdio.h>
main()
{
int c;
while(c = (getchar() != EOF)) // Read char in buffer and check to see if it's EOF or not, then assign a 1 or 0 to c
{
printf("1 Not End Of File\n");
}
printf("0 End Of File\n");
}
显然,我可以使用printf("%d",c);
来显示它是1
还是0
,但问题仍然存在......
为什么当我aa ctrl+D
时不打印
1 Not End Of File
1 Not End Of File
0 End Of File?
此外,我完全清楚网站上已经回答了同样的问题,但似乎没有人详细回答这个具体问题,他们似乎又说getchar()
如何得到一个字符并读取它以及如何在EOF
时退出,但不是为什么如果将EOF
添加到几个字符中,下一行就不会运行。
它好像是读了两个a
然后而不是将c
设置为0
,当它应该到达CTRL+D
然后退出时,它似乎坐着等待更多的投入?
答案 0 :(得分:0)
我认为Ctl-D只是触发程序读取输入。因为您输入了一些字符,所以程序有一些东西需要阅读,并且看不到输入的结尾。单独键入Ctl-D,程序尝试读取输入但看不到任何内容并将其视为已到达输入的末尾。喜欢添加Ctl-D本身不会传递给getchar()作为输入读取。