这是我的代码。我用终端在ubuntu中运行它。当我在终端输入( Ctrl D )时,程序没有停止,而是继续等待我的输入。
unix中 Ctrl D 是否等于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);
}
答案 0 :(得分:12)
EOF不是角色。 EOF
是getchar()
在到达输入结尾或遇到某种错误时返回的宏。 ^D
不是“EOF字符”。当你在一行上点击^ D时,linux下发生的事情是它关闭了流,getchar()
调用到达输入的末尾并返回EOF
宏。如果在行的中间某处键入^D
,则流不会关闭,因此getchar()
将返回它读取的值,并且您的循环不会退出。
有关更好的说明,请参阅stdio section of the C faq。
此外:
在现代系统中,它不反映存储在文件中的任何实际文件结束字符;这是一个没有更多角色可用的信号。
答案 1 :(得分:6)
除了Jon Lin关于EOF的回答,我不确定你写的代码是你的意图。如果您想查看变量getchar
中d
返回的值,则需要将while
语句更改为:
while((d=getchar())!=EOF) {
这是因为不等式运算符的优先级高于赋值。因此,在您的代码中,d
始终为0
或1
。