当我在Windows控制台程序中按Ctrl + Z时,为什么输入有时会终止?

时间:2013-10-15 03:24:37

标签: c++ windows input inputstream

据我所知,使用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] [换行符],则程序存在正确。

我理解它可能是特定于操作系统的,但我只是对那里发生的事情感到好奇。

1 个答案:

答案 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效果不同。