std::basic_ios<CharT,Traits>::clear
從 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); // 模拟用户输入(不可移植:见 ungetc 注解) double n; while (std::cout << "请输入数字:" && !(std::cin >> n)) { std::cin.clear(); std::string line; std::getline(std::cin, line); std::cout << line << "\n抱歉,但 '" << line << "' 不是数字\n"; } std::cout << n << "\n感谢输入数字 " << n << '\n'; }
輸出:
请输入数字:XYZ 抱歉,但 'XYZ' 不是数字 请输入数字:3.14 感谢输入数字 3.14
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 出版時的行為 | 正確行為 |
---|---|---|---|
LWG 416 | C++98 | 當前錯誤狀態包含了 exceptions() 也包含的位時會拋出異常 | 改成檢查修改後的錯誤狀態 |
[編輯] 參閱
設置狀態標誌 (公開成員函數) | |
返回狀態標誌 (公開成員函數) |