2

フェイルビットが設定された後: 最初に cin.clear() を呼び出し、次に cin.ignore() を呼び出すと、プログラムは正しいです。そして、最初に cin.ignore() を呼び出してから cin.clear() を呼び出すと、無視が機能しないように見えます。なぜですか?

4

2 に答える 2

2

cin.clear()フェイルビットをクリアしますが、クリアcin.ignore()しません。

clear()これは、ストリームが無効な状態にある場合、 を呼び出すとignore()、状態が正常にリセットされ、次の文字が無視されることを意味します。

一方、手段にignore()続く呼び出しは失敗し、ストリーム状態のリセットに進みます。したがって、その場合、次の文字は無視されません。clear()ignore()clear()

于 2012-08-17T09:04:06.187 に答える
2

cin.ignore()cin.good()が の場合にのみ、ストリームからデータを消費する作業を行いますtruefailbitが設定されている場合は、 にcin.good()なりますfalse

于 2012-08-17T09:12:35.330 に答える