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() 也包含的位时会抛出异常 | 改成检查修改后的错误状态 |
参阅
设置状态标志 (公开成员函数) | |
返回状态标志 (公开成员函数) |