我正在尝试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,无论我之前是否输入过任何内容,并阅读所有字符直到EOF
)。