std::basic_ios<CharT,Traits>::clear
From cppreference.com
| void clear( std::ios_base::iostate state = std::ios_base::goodbit ); |
||
ストリームのエラー状態フラグを、引数 state の値に設定します。デフォルトでは、すべてのエラー状態フラグをクリアする効果を持つ std::ios_base::goodbit が設定されます。
もし rdbuf() がヌルポインタである(つまり、関連付けられたストリームバッファが存在しない)場合、state | std::ios_base::badbit が設定されます。
目次 |
[編集] パラメータ
| state | - | 新しいエラー状態フラグの設定。以下の定数の組み合わせにすることができます。
|
[編集] 戻り値
(なし)
[編集] 例外
新しいエラー状態に、exceptions() マスクにも含まれているビットが含まれている場合、failure 型の例外がスローされます。
[編集] 例
引数なしの `clear()` は、予期しない入力の後に failbit を解除するために使用できます。 std::cin.putback(c) については、ungetc を参照してください。
このコードを実行
#include <iostream> #include <string> int main() { for (char c : {'\n', '4', '1', '.', '3', '\n', 'Z', 'Y', 'X'}) std::cin.putback(c); // emulate user's input (not portable: see ungetc Notes) double n; while (std::cout << "Please, enter a number: " && !(std::cin >> n)) { std::cin.clear(); std::string line; std::getline(std::cin, line); std::cout << line << "\nI am sorry, but '" << line << "' is not a number\n"; } std::cout << n << "\nThank you for entering the number " << n << '\n'; }
出力
Please, enter a number: XYZ I am sorry, but 'XYZ' is not a number Please, enter a number: 3.14 Thank you for entering the number 3.14
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 412 | C++98 | 現在のエラー状態が exceptions() マスクにも含まれるビットを含む場合、例外がスローされます。 |
代わりに新しい エラー状態をチェックします。 |
[編集] 関連項目
| 状態フラグを設定する (public member function) | |
| 状態フラグを返す (公開メンバ関数) |