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;
}