12

cin.ignoreとはどう違いcin.syncますか?

4

1 に答える 1

17

cin.ignore指定された数まで、または区切り文字に到達するまで (含まれている場合)、文字を破棄します。引数なしで呼び出すと、入力バッファーから 1 文字が破棄されます。

たとえば、cin.ignore (80, '\n')80 文字、または改行に到達するまで検出した文字数を無視します。

cin.sync入力バッファからすべての未読文字を破棄します。ただし、各実装でそうすることが保証されているわけではありません。したがって、ignore一貫性が必要な場合は、 を選択することをお勧めします。

cin.sync()残っているものをクリアするだけです。sync()私が考えることができる唯一の用途ignoreは、次の代替品ですsystem ("PAUSE");

cin.sync(); //discard unread characters (0 if none)
cin.get(); //wait for input

と を使用するcin.ignore()cin.get()、これは少し混ざり合う可能性があります。

cin.ignore (std::numeric_limits<std::streamsize>::max(),'\n'); //wait for newline
//cin.get()

改行が残っている場合は、置くだけignoreでスキップされるようです。ただし、両方を配置すると、改行がない場合は 2 つの入力を待機します。読み取られていないものをすべて破棄すると、その問題は解決しますが、やはり一貫性がありません。

于 2012-05-14T14:34:28.130 に答える