为什么 Ctrl-Z 不会触发 EOF?

Ale*_*lex 6 c eof getchar visual-c++

为什么Ctrl+Z在下面的小程序中没有触发循环完成?

#include <stdio.h>

main()
{
    int c;
    while ((c = getchar()) != EOF)
    {
        //nothing 
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我输入:test^ZEnter,它不会跳出循环。

我发现了相关问题(此处此处),但没有一个问题可以解释 Windows 下的 C(而不是 C++)。

注意:我在 Windows 8.1 上使用 Visual Studio 2015 PRE

Ram*_*man 5

您需要点击Enter然后使用ctrl+ Z,然后Enter再次。

或者,您也可以使用F6


Mar*_*ler -4

EOF就像你使用的那样,它不是一个字符。这是该流所处的状态。

我的意思是,哎呀,您甚至链接了这个问题,所以您不妨阅读已接受的答案

EOF 的基本形式是零长度读取。

它不是“EOF 字符”。

http://www.c-faq.com/stdio/getcharc.html引用了与您不同的情况,其中有人将 的返回值存储getcharchar. 潜在的问题仍然偶尔发生:不同的运行时为EOF 整数实现不同的值(这就是为什么我说,它不是 EOF字符),并且事情很容易出错。特别是在 Visual C++ 中,它不是“真正的”C 编译器,而是具有兼容模式的 C++ 编译器,似乎可能会出错。

  • 所引用案例中的问题是使用“char”作为变量;发布的代码正确地使用了 `int`,它可以检测 EOF“带外”状态。 (4认同)