std::basic_ios<CharT,Traits>::clear

来自cppreference.com
< cpp‎ | io‎ | basic ios
 
 
 
 

通过以 state 的值赋值以设置流错误状态标志。默认赋值 std::ios_base::goodbit 以清除所有错误状态标志。

如果 rdbuf() 是空指针(即没有关联流缓冲,那么赋值 state | std::ios_base::badbit。可能会抛出异常。

参数

state - 新的错误状态标志设置。它可以是下列常量的组合:
常量 解释
goodbit 无错误
badbit 不可恢复的流错误
failbit 输入/输出操作失败(格式化或提取错误)
eofbit 关联的输出序列已抵达文件尾


返回值

(无)

异常

如果新的错误状态包含了一个 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() 也包含的位时会抛出异常 改成检查修改后的错误状态

参阅

设置状态标志
(公开成员函数)
返回状态标志
(公开成员函数)