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

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

#include  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不是一个角色。 它是该流的状态。

我的意思是,哎呀,你甚至把这个问题联系起来,所以你不妨阅读接受的答案 :

EOF的基本forms是零长度读取。

这不是“EOF角色”。

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