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
を押します。最後のものなしでのみ出力し、入力を待ってハングします。入力してもう一度+を押すと、最後に残りが印刷され、次の入力からが印刷されますが、最後のはありません。そして、何も入力せずに最後に+を押すと、残りが出力されて終了します。CtrlDasd
f
gh
CtrlDf
g
h
CtrlDh
この最初のシーケンスの最後ですでに+をasdf
押したので、読み取りと終了を期待していました。CtrlD
取得後も入力を待っているのはなぜEOF
ですか?
前に読み取った最後の文字が印刷されないのはなぜEOF
ですか?また、前に何も入力せずに+
を押したときにのみ終了するのはなぜですか?
このループを期待どおりに動作させるには、どのように変更する必要がありますか?(つまり、前に何かを入力したかどうかに関係なく、入力で+シーケンスを取得した直後に読み取りを停止し、までのすべての文字を読み取ります)。CtrlD
CtrlDEOF