C IO流條件狀態

2021-09-10 04:44:45 字數 3006 閱讀 6017

測試平台:windows7+vs2010

iostate:流的標誌位(條件狀態),具體如下

標誌位:列舉常量,十進位制分別代表0、1、2、4、16,他們與流狀態無關,標誌位都是常量。判斷標誌位是否有效可以用對應標誌位的成員函式。

strm:

:badbit//用來指出流已經奔潰(100),在這裡strm表示一種io型別,比如istream

strm:

:failbit//用來指出乙個io操作失敗(010)

strm:

:eofbit//指出流到達了檔案結束(001)

strm:

:goodbit//指出流處於無錯誤狀態(000)

strm:

:_hardfail//暫時也不清楚是什麼(10000)

對應標誌位的成員函式:以下置位可以理解為對應標誌位有效

s.

eof(

)//s表示乙個流的物件,例如cin;如果s的eofbit置位,則返回ture

s.bad()

//若s的badbit置位,則返回ture

s.fail()

//若s的failbit或badbit置位,則返回ture

s.good()

//若s處於有效狀態,則返回ture

note:badbit被置位時,成員函式fail()也會返回ture,eofbit置位會導致failbit置位,需要注意的是,eofbit在讀取完最後乙個字元後並沒有置位,當下次嘗試讀取乙個字元失敗的時候才會將eofbit和failbit置位,所以用成員函式fail()或good()來確定流的總體狀態是正確的。舉個例子如下:

#include

"stdafx.h"

#include

#include

using namespace std;

int_tmain

(int argc, _tchar* ar**)

system

("pause");

return0;

}

結果如下:

可以看出,第二次輸入ctrl+z(windows7+vs2010,且必須是第乙個字元),就退出了while迴圈(遇到eof)。(c++primer8.1.2練習程式)程式涉及到了ignore()成員函式。while函式檢查表示式返回的流的狀態,把流的狀態當while函式的判斷條件等價於!fail()當判斷條件,只要返回的流的狀態是正常的,就不會停止while迴圈。

下面是乙個io錯誤的例子:

int a;

cin>>a;

當輸入不是整型數時,例如abc,流就會出錯,一旦乙個流發生錯誤,其後續的io操作都會失敗。將乙個流物件作為條件使用while(cin>>a),就可以避免使用錯誤狀態的流 。

標誌位置位

s.

setstate

(flags)

//根據給定的flags標誌位,將流s中對應的標誌位置位,flags型別strm::iostate。返回void

標誌位清除

s.

clear()

//將流s中所有狀態位復位,將流的狀態設定為有效。返回void

s.clear

(flags)

//根據給定的flags標誌位,將流s中對應條件狀態位復位。flags型別為strm::iostate。返回void

獲取流狀態

s.

rdstate()

//返回流s的當前條件狀態,返回型別為strm::iostate

成員函式rdstate()一般來說返回的是乙個iostate值(0、1、2、4、16),對應流的當前狀態。但是使用了成員函式setstate(),得到的就不一定是這幾個固定的數,而是所有有效標誌位常量之和。如下:

可以看到,rdstate返回的是6,並不是乙個iostate;接下來是常量:4、2、1、0;接下來是對應標誌位成員函式,1表示被置位。單獨執行cin.setatate(ios::eofbit);時,cin.fail()函式不會返回1;單獨執行cin.setstate(ios::badbit);時,cin.fail()cin.bad()都會返回1;

在查閱資料的過程中,一篇部落格寫的很好,如果還有什麼疑惑的地方,可以參考一下

c io庫條件狀態

badbit 用來指出流已經崩潰,屬於系統級錯誤,如不可恢復的讀寫錯誤。failbit 表示乙個io操作失敗了,比如讀取數字卻讀取的是字元,這是可以恢復的 eofbit 用來表示檔案達到檔案結尾,這也是可以恢復的 goodbit 表示流的狀態正常 注意的是,一但流發生錯誤,其上後續的io操作都會失敗...

C I O庫流狀態標誌位

再來看看輸入狀態標記位 狀態測試函式 狀態設定函式之間的關係 輸入狀態標記位常量有以下幾個 標記位常量 常量 含義 failbit標記位的值 eofbit標記位的值 badbit標記位的值 轉化為10進製 ios failbit 輸入 輸出 流出現非致命錯誤,可挽回 1 0 0 4 ios badb...

C IO類 1 流的介紹和流的狀態

基本io庫型別 istream 輸入流 型別,提供輸入操作 ostream 輸出流 型別,提供輸出操作 cin,乙個istream物件,從標準輸入讀取資料 cout,乙個ostream物件,向標準輸出寫資料 cerr,乙個ostream物件,通常用於輸出程式錯誤資訊,寫入到標準錯誤 用來從乙個ist...