尝试打印出所有输入字符的 getchar() != EOF 的 return

Trying to print out the return of a getchar() != EOF of all inputted chars

与当前代码有些混淆。 在 Uni 学习,目前正在学习 The C Programming Language (2nd Edition) by Brian W. Kernighan

现在我已经编程好几年了,主要是用 C++ 和一点 java,但是并没有真正使用 C,有些事情真的很困扰我。

所以书中的练习 1-6 要你证明 getchar() 读取的字符是 10

现在我完全明白它读取缓冲区中的字符并检查它是否不是 EOF,如果是 returns 1 否则 0

这意味着如果我键入 a 并按回车键,它会读取 a 和回车键以及 returns 1,1 另外,如果我使用 CTRL+D 它 returns 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 时 while 是如何退出的,但不是为什么下一行不是 运行 如果 EOF 被添加到几个字符。

它似乎读取了两个 a 然后而不是将 c 设置为 0 当它应该到达 CTRL+D 然后退出 while,它似乎在等待更多输入?

我认为Ctl-D只是为了触发程序读取输入。因为您输入了一些字符,所以程序需要读取一些内容并且看不到输入的结尾。单独输入 Ctl-D ,程序会尝试读取输入但什么也看不到,并认为它已到达输入的末尾。想补充一点 Ctl-D 本身不会传递给 getchar() 作为输入读取。