我知道使用 ctrl-z 来表示 EOF 或 EOT 通常已经过时且不推荐,但我只是好奇幕后发生了什么。
假设我在 C++ 中有这样的东西:
#include <iostream>
#include <string>
int main() {
while (!cin.eof()) {
string str;
getline(cin, str);
}
cout << "out of while" << endl;
return 0;
}
如果我执行 abc[^Z][newline],程序仍然运行。与 abc[^D][换行符] 相同。
但如果我输入一行纯粹包含[^Z][newline],则程序正常存在。
我知道它可能是特定于操作系统的,但我只是好奇那里发生了什么。
首先,本文对 Ctrl-Z (DOS / Windows) 和 Ctrl-D (UNIX / Linux) 进行了深入的介绍:http://latedev.wordpress.com/2012/12/04/all-about-eof/
非常值得一读。它还指出了上面的 while 循环的问题。
最重要的是,Ctrl-Z 并不表示 EOF。然而,当它是该行的第一个字符时,大多数从控制台读取的 Windows 程序都会将其识别为输入的结束。结果实际上是 EOFcin
。确实,以文本模式打开的文件may尽管 C++ 标准中没有任何要求,但它们的行为方式相同。
请注意,从历史上看,用于输入结束的 Ctrl-Z 必须位于行的开头。该行其他位置的 Ctrl-Z 没有相同的效果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)