据我所知,使用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] [换行符],程序仍会运行。同样适用于abc [^ D] [换行符]。
但如果我输入的行纯粹包含[^ Z] [换行符],则程序存在正确。
我理解它可能是特定于操作系统的,但我只是对那里发生的事情感到好奇。
答案 0 :(得分:1)
首先,本文对Ctrl-Z(DOS / Windows)和Ctrl-D(UNIX / Linux)有一些了解:http://latedev.wordpress.com/2012/12/04/all-about-eof/
非常值得一读。它还指出了上面的while循环问题。
最重要的是,Ctrl-Z不表示EOF。但是,当它是该行的第一个字符时,从控制台读取的大多数Windows程序都会将其识别为输入的结尾。结果实际上是cin
上的EOF。实际上,以文本模式打开的文件可能的行为方式相同,尽管C ++标准中没有任何内容要求它们。
请注意,历史上,输入结束的Ctrl-Z必须位于行的开头。行上其他位置的Ctrl-Z效果不同。