我正在学习 C++ 并试图理解,
如果将 EOF 字符(Windows 上的 Ctrl + Z)放在行尾,为什么它不会中断 while 循环?
我的代码:
int main() {
char ch;
while(cin >> ch) {
cout << ch;
}
}
当我输入 ^Z 时,循环中断;
但是当我输入 12^Z 时,它没有。
最佳答案
您不会在 C++ 标准中找到问题的答案。
cin >> ch
将是一个“真”条件,只要既没有文件结束条件也没有输入错误。文件结束条件是如何被触发的,语言并没有具体规定,它可以而且将会因操作系统而异,甚至在同一个操作系统中的配置选项也会有所不同。 (例如,类 Unix 系统默认使用 control-D,但可以通过 stty
命令更改。)
Windows 使用 Control-Z 触发文本输入流的文件结束条件;除了在一行的开头,它只是碰巧不这样做。
Unix 的行为有点不同;它在一行的开头使用 Control-D(默认情况下),或者在一行的中间使用 两个 Control-D。
对于 Unix,这仅适用于从终端读取时;如果您正在从文件中读取,control-D 只是另一个非打印字符,它不会触发文件结束条件。即使从磁盘文件读取时,Windows 似乎也将 control-Z 识别为文件结束触发器。
底线:不同的操作系统表现不同,主要是由于不明的历史原因。 C++ 旨在处理这些行为中的任何一种,这就是为什么它没有具体说明某些细节的原因。
关于c++ - 为什么 EOF 字符放在行尾时不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11378899/