尝试打印出所有输入字符的 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()
读取的字符是 1
或 0
现在我完全明白它读取缓冲区中的字符并检查它是否不是 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() 作为输入读取。
与当前代码有些混淆。 在 Uni 学习,目前正在学习 The C Programming Language (2nd Edition) by Brian W. Kernighan
现在我已经编程好几年了,主要是用 C++ 和一点 java,但是并没有真正使用 C,有些事情真的很困扰我。
所以书中的练习 1-6 要你证明 getchar()
读取的字符是 1
或 0
现在我完全明白它读取缓冲区中的字符并检查它是否不是 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() 作为输入读取。