1. ホーム
  2. c++

[解決済み】cin.ignoreとcin.syncの違いについて

2022-02-19 12:10:51

質問

とはどのような違いがあるのでしょうか。 cin.ignorecin.sync ?

解決方法は?

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つの入力を待つことになります。読み込まれなかったものはすべて破棄すればこの問題は解決しますが、やはり一貫性がありません。