关于C#:为什么Ctrl-Z不会触发EOF?

Why Ctrl-Z does not trigger EOF?

为什么Ctrl + Z不触发循环在以下小程序上完成?

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>

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

    return 0;
}

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

我在(这里和这里)周围发现了相关问题,但没有一个问题可以在Windows下针对C(不是C ++)进行解释。

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


您需要打Enter,然后使用ctrl + Z,然后再次使用Enter

或者,您也可以使用F6


像您使用的EOF不是字符。 这是流的状态。

我的意思是,哎呀,您甚至链接了这个问题,因此您最好阅读已接受的答案:

The underlying form of an EOF is a zero-length read.

这不是" EOF字符"。

http://www.c-faq.com/stdio/getcharc.html引用的情况与您的情况不同,有人将getchar的返回值存储在char中。 潜在的问题仍然偶尔发生:不同的运行时为EOF整数实现不同的值(这就是我说的,它不是EOF字符的原因),事情总是会出错。 特别是在Visual C ++中,它不是"真正的" C编译器,而是具有兼容模式的C ++编译器,看来情况可能会出错。