【发布时间】:2012-07-07 21:48:27
【问题描述】:
我正在学习 C++ 并试图理解,
如果将 EOF 字符(Windows 上的 Ctrl + Z)放在行尾,为什么不会中断 while 循环?
我的代码:
int main() {
char ch;
while(cin >> ch) {
cout << ch;
}
}
当我输入 ^Z 时,循环中断;
但是当我输入 12^Z 时,它没有。
【问题讨论】:
-
可能与 12^z != ^z ... 12^z 不会评估为假
-
Unix 系统的工作方式相同;行中间的 CTRL-D 被忽略(或者可能不完全;bash shell 会发出哔哔声,但仍然忽略它),它只在行首起作用。我不知道这是否有真正的原因,或者 60 年代 Unix 发明时的某个人是否认为拥有这将是一件好事,从那时起就一直没有人知道为什么:-)
-
@ChristianStieber:在类 Unix 系统上,单个 control-D 在行首触发文件结束条件;否则,两个 control-D 触发文件结束条件。
标签: c++ windows stream event-handling eof