EOF和普通整数有什么区别?

时间:2011-08-26 07:10:00

标签: c char eof

下面是代码

代码:

#include <stdio.h>



int main(void)
{
    int ch;

    while((ch = getchar()) != 'h')
        putchar(ch);


    return 0;
}

问题:

1.)所以像往常一样我只是运行这段代码,由于好奇心在程序提示输入时,我插入了^z(CTRL + Z) EOF (Windows 7 Command Prompt),但我得到的是无限循环的字符打印

2.)从代码中,我的逻辑是,因为我输入^z到程序,它只会评估逻辑(ch = getchar()) != 'h'和值true或{{1} }将被返回并且字符1将被打印出来。但是不同的结果是收益。

3 个答案:

答案 0 :(得分:2)

当您按^Z时,程序会注意到输入流已关闭,但您继续使用getchar(),因此您获得了EOF。这无限循环,因为你不能再输入'h'了。请注意 'h'(不是'A',不是^M,也不是^Z停止该程序,因为如果你没有得到'h',你就会循环

换句话说,如果您想要停止除'h'之外的任何其他内容,请执行

do
{
    ch = getchar();
    putchar(ch);
} while (ch == 'h');

答案 1 :(得分:1)

EOF通常定义为-1(但它是特定于实现的)。当你调用putchar(-1)时,它将被转换为unsigned char,并成为值255,然后输出(ÿ除非我弄错了)。

答案 2 :(得分:0)

EOF 一个具有实现定义负值的整数。你的代码无限循环,因为只有输入'h'才能完成。但是一旦它读取了!= 'h'的EOF,它就会进入无限循环,因为标准输入是关闭的,没有任何东西可以让它返回任何其他内容。