试图打印出所有输入字符的getchar()!= EOF的返回值

时间:2017-01-22 18:53:34

标签: c eof

与当前代码混淆。 在Uni学习,目前正在通过Brian W. Kernighan的 C编程语言(第2版)

现在我已经编程了好几年,主要是用C ++和一些java编写的,但是并没有真正使用C语言,而且有些东西真的让我烦恼。

因此,本书中的练习1-6希望您证明getchar()所读取的字符可以是10

现在我完全理解它会读取缓冲区中的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然后退出时,它似乎坐着等待更多的投入?

1 个答案:

答案 0 :(得分:0)

我认为Ctl-D只是触发程序读取输入。因为您输入了一些字符,所以程序有一些东西需要阅读,并且看不到输入的结尾。单独键入Ctl-D,程序尝试读取输入但看不到任何内容并将其视为已到达输入的末尾。喜欢添加Ctl-D本身不会传递给getchar()作为输入读取。