美文网首页
C++IO的clear()函数

C++IO的clear()函数

作者: 逆若流溪 | 来源:发表于2019-08-25 22:03 被阅读0次

    参考C++ Primer中文版279页8.1.2

    C++的IO对象中存在一个clear()成员函数,作用是将流的条件状态复位,即如果原来的流已经遇到了eofbit,failbit或者badbit,可以经通过clear()函数将流重新复位为goodbit();

    那么该如何理解这句话

    首先需要明白:
    eofbit表示当前流已经到了文件末尾
    failbit表示一个IO操作失败了
    badbit表示流已经崩溃
    即,当以上三种情况出现时均会导致流对象的失效,同样也可以理解为如果将流作为判断条件,则此时流的状态值为false(注:流是可以直接作为判断条件的)
    当以上三种情况出现后,流会失效,之后将不能继续使用该流对象,举个例子:

    #include<iostream>
    using namespace std;
    int main()
    {
        int num1, num2;
        while (cin>>num1)//1,此处需要采用ctrl+z进行退出循环(windows环境下)
        {
            cout << num1 << endl;
        }
        cout << cin.eof() << cin.fail() << cin.bad() << endl;//2,这行代码分别输出流是否处于eofbit,failbit,badbit状态
        cin >> num2 ;
        cout << "后边的:"<<num2 << endl;
    }
    
    输出结果1

    通过输出结果可以看出,通过ctrl+z退出循环时,导致了流状态eofbit,failbit的产生,同时cin>>num2;并没有被执行,现在给原有的代码加上cin.clear();,并执行.

    #include<iostream>
    using namespace std;
    int main()
    {
        int num1, num2;
        while (cin>>num1)
        {
            cout << num1 << endl;
        }
        cout << cin.eof() << cin.fail() << cin.bad() << endl;
        cin.clear();
        cout << "第二次流状态:"<<cin.eof() << cin.fail() << cin.bad() << endl;
        cin >> num2 ;
        cout << "后边的:"<<num2 << endl;
    }
    
    输出结果2
    通过两次的执行结果的对比可以看出clear()eofbitfailbit进行了复位,使其重新处于goodbit的状态,并可以再次使用.

    希望通过这篇文章了解该如何使用clear()函数

    相关文章

      网友评论

          本文标题:C++IO的clear()函数

          本文链接:https://www.haomeiwen.com/subject/tgwkectx.html