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); // 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() 掩码中的位,则会抛出异常 |
检查新的 错误状态而不是 |
[编辑] 另请参阅
设置状态标志 (公共成员函数) | |
返回状态标志 (公共成员函数) |