ctrl-d没有停止while(getchar()!= EOF)循环

时间:2012-08-14 00:49:44

标签: c unix eof

这是我的代码。我用终端在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);
}

2 个答案:

答案 0 :(得分:12)

EOF不是角色。 EOFgetchar()在到达输入结尾或遇到某种错误时返回的宏。 ^D不是“EOF字符”。当你在一行上点击^ D时,linux下发生的事情是它关闭了流,getchar()调用到达输入的末尾并返回EOF宏。如果在行的中间某处键入^D,则流不会关闭,因此getchar()将返回它读取的值,并且您的循环不会退出。

有关更好的说明,请参阅stdio section of the C faq

此外:

  

在现代系统中,它不反映存储在文件中的任何实际文件结束字符;这是一个没有更多角色可用的信号。

答案 1 :(得分:6)

除了Jon Lin关于EOF的回答,我不确定你写的代码是你的意图。如果您想查看变量getchard返回的值,则需要将while语句更改为:

    while((d=getchar())!=EOF) {

这是因为不等式运算符的优先级高于赋值。因此,在您的代码中,d始终为01