C++学习笔记
Cin.clear()用法
Cin包含一个描述流状态的数据成员。流状态由三个ios_base元素组eofbit,badbit,failbit
其中每个元素都是一位,可以是1或者是0,当cin操作到达文件末尾时,它将设置eofbit;当cin操作未能读取到预期的字符时它将设置failbit。I/O失败也可能将failbit设置为1,在一些无法诊断的失败破坏流时,badbit元素将被设置。当全部三个状态都设置为0时,说明一切顺利。程序可以检查流状态并使用这种信息来决定下一步做什么。
流状态
成员 |
描述 |
Eofbit |
如果文件到达文件尾,则设置为1 |
Badbit |
如果流被破坏,设置为1,例如,文件读取错误 |
Failbit |
如果输入操作没能读取预期的字符或者是输出操作没能写入预期的字符,设置为1 |
Goodbit |
另一种表示0的方法 |
Good() |
如果流可以使用(所有的位被清除),返回true |
Eof() |
如果eofbit被设置,返回true |
Bad() |
如果 badbit被设置,返回true |
Fail() |
如果badbit或者failbit被设置,返回true |
Clear (iostate s) |
将流状态设置为s,s的默认值为0 |
Cin.clear()其实就是清除cin流的错误状态
例子:
#include<iostream>
usingnamespace std;
intfill_array(double arr[],int limit)
{
double temp;
int i;
for(i=0; i<limit; i++)
{
cout<<"inter"<<i+1<<endl;
cin>>temp;
if(!cin) //判断是否是错误的类型(虽然题目是double型的,输入int型没问题),如果类型错误,failbit被设置为1,fail()返回true,cin被标记为错误,不可用;
{
cin.clear(); //此时用cin.clear()来清除错误状态,使failbit设置为0;现在可用
while(cin.get()!='\n')
continue;
cout<<"bad input"<<endl;
break;
}
else if(temp<0)
break;
arr[i]=temp;
}
return i;
}
int main()
{
double arr[100];
int limit=100;
int a;
a= fill_array(arr,limit);
for(int j=0;j<a;j++)
cout<<arr[j]<<endl;
return 0;
}