提问人:Alex 提问时间:7/7/2015 最后编辑:CommunityAlex 更新时间:7/7/2015 访问量:10265
为什么 Ctrl-Z 不触发 EOF?
Why Ctrl-Z does not trigger EOF?
问:
为什么 + 不触发循环在以下小程序上完成?CtrlZ
#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
答:
-4赞
Marcus Müller
7/7/2015
#1
EOF
就像你用的,它不是一个字符。这是该流所处的状态。
我的意思是,哎呀,你甚至把这个问题联系起来,所以你不妨阅读公认的答案:
EOF 的基本形式是零长度读取。
它不是“EOF 字符”。
http://www.c-faq.com/stdio/getcharc.html 引用了一个与您的案例不同的案例,其中有人将 的返回值存储在 .潜在的问题仍然偶尔发生:不同的运行时为整数实现不同的值(这就是为什么我说,它不是 EOF 字符),而且事情总是出错。特别是在Visual C++中,它不是一个“真正的”C编译器,而是一个具有兼容模式的C++编译器,似乎事情可能会出错。getchar
char
EOF
评论
0赞
user2864740
7/7/2015
那么,为什么 Ctrl+Z 不触发 EOF 的“该流所处的状态”呢?
0赞
Marcus Müller
7/7/2015
它可能确实如此,但您没有检查这一点。
1赞
user2864740
7/7/2015
那么如何用getchar()检查它呢?
1赞
user2864740
7/7/2015
显然人们喜欢这样做。
4赞
user2864740
7/7/2015
所引用案例中的问题是用作变量;发布的代码正确使用 ,它可以检测 EOF“带外”状态。char
int
5赞
Raman
7/7/2015
#2
您需要点击,然后使用 +,然后再使用。EnterctrlZEnter
或者,您也可以使用F6
评论
EOF
stdin
,则 CTRL+Z(windows、DOS)和 CTRL+D(Linux、Unix、OSX 等)会发送 EOF。