这是我的代码.我用终端在ubuntu中运行它.当我CtrlD在终端输入(a )时,程序没有停止,而是继续等待我的输入.
CtrlD在unix中不等于EOF吗?
谢谢.
#include<stdio.h>
main() {
int d;
while(d=getchar()!=EOF) {
printf("\"getchar()!=EOF\" result is %d\n", d);
printf("EOF:%d\n", EOF);
}
printf("\"getchar()!=EOF\" result is %d\n", d);
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*Lin 12
EOF不是一个角色.这EOF
是一个宏,getchar()
当它到达输入结束或遇到某种错误时返回.这^D
不是"EOF角色".当你在一行上点击^ D时,linux下发生的事情是它关闭了流,并且getchar()
调用到达输入的末尾并返回EOF
宏.如果您^D
在一行中间的某处键入,则流不会关闭,因此getchar()
返回它读取的值并且您的循环不会退出.
另外:
在现代系统中,它不反映存储在文件中的任何实际文件结束字符; 这是一个信号,没有更多的角色可用.
除了Jon Lin关于EOF的答案,我不确定你写的代码是你的意图.如果要查看getchar
变量中返回的值d
,则需要将while
语句更改为:
while((d=getchar())!=EOF) {
Run Code Online (Sandbox Code Playgroud)
这是因为不等式运算符的优先级高于赋值.因此,在您的代码中,d
将始终是0
或1
.