为什么有时在 Windows 控制台程序中按 Ctrl+Z 时才会终止输入? [复制]

2023-11-30

我知道使用 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(使用前将#替换为@)

为什么有时在 Windows 控制台程序中按 Ctrl+Z 时才会终止输入? [复制] 的相关文章