参考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()
将eofbit与failbit进行了复位,使其重新处于goodbit的状态,并可以再次使用.
希望通过这篇文章了解该如何使用clear()函数
网友评论