接下來我們來學習一下
輸入/輸出的狀態標志的相關知識,C++中負責的輸入/輸出的系統包括了關於每一個輸入/輸出操作的結果的記錄信息。這些當前的狀態信息被包含在io_state類型的對象中。io_state是一個枚舉類型(就像open_mode一樣),以下便是它包含的值。
goodbit 無錯誤
Eofbit 已到達文件尾
failbit 非致命的輸入/輸出錯誤,可挽回
badbit 致命的輸入/輸出錯誤,無法挽回
有兩種方法可以獲得輸入/輸出的狀態信息。一種方法是通過調用rdstate()函數,它將返回當前狀態的錯誤標記。例如,假如沒有任何錯誤,則rdstate()會返回goodbit.
下例示例,表示出了rdstate()的用法:
另一種方法則是使用下面任何一個函數來檢測相應的輸入/輸出狀態:
bool bad();
bool eof();
bool fail();
bool good();
下例示例,表示出了上面各成員函數的用法:
如果錯誤發生,那麼流狀態既被標記為錯誤,你必須清除這些錯誤狀態,以使你的程序能正確適當地繼續運行。要清除錯誤狀態,需使用clear()函數。此函數帶一個參數,它是你將要設為當前狀態的標志值。,只要將ios::goodbit作為實參。
示例代碼如下:
通常當我們發現輸入有錯又需要改正的時候,使用clear()更改標記為正確後,同時也需要使用get()成員函數清除輸入緩沖區,以達到重復輸入的目的。
示例代碼如下:
最後再給出一個對文件流錯誤標記處理的例子,鞏固學習,代碼如下: