【发布时间】:2023-04-05 12:36:02
【问题描述】:
我正在尝试使用 istream_iterator 来读取来自 cin 的字符。我读过按 Ctrl+D 会发送一个结束输入流的EOF 字符。不幸的是,它出了点问题。这是我的代码:
#include <iterator>
int main()
{
using namespace std;
istream_iterator<char> it(cin), eos;
while (it != eos) clog << *(it++);
}
我正在运行它并输入:as df,然后按 Ctrl+D。
它只输出asd,没有最后一个f,然后挂起等待输入。当我输入gh 并再次按 Ctrl+D 时,它最后会打印剩余的f,并从下一个输入中打印g,但再次没有最后h。当我最终按下 Ctrl+D 而不输入任何内容时,它会打印剩余的 h 并退出。
我预计它会读取 asdf 并退出,因为我已经在第一个序列的末尾按下了 Ctrl+D。
为什么得到EOF后还在等待输入?
为什么它不打印在EOF 之前读取的最后一个字符?
为什么它只在我按 Ctrl+D 之前没有输入任何内容时退出?
这个循环需要如何改变以使其按照我期望的方式运行? (即在输入中获得 Ctrl+D 序列后立即停止阅读,无论我之前是否输入过任何内容,并阅读 all 个字符到EOF)。
【问题讨论】:
-
如果您使用的是 Windows/DOS,EOF 是
CTRL+Z,而不是CTRL+D。 -
我知道。但感谢您完成。
标签: c++ eof cin istream istream-iterator