2014-10-28 58 views
-1

美好的一天,我的老師說我應該學習C++中的函數cin.clear()。我一直在尋找,但從來沒有找到正常的解釋。 This resource is cplusplus表示此功能C++詳細描述中的函數cin.clear()是什麼?

爲流的內部錯誤狀態標誌設置一個新值。標誌的當前值被覆蓋:所有位由狀態中的那些代替;如果state是goodbit(它是零),所有的錯誤標誌都被清除。

但我不太明白「狀態」是什麼,從那裏有標誌和錯誤,這就是爲什麼,以及我們如何以0值取代它們。什麼是「旗幟」,爲什麼他們需要。正如他所說,我應該知道什麼參數或數據需要一個函數cin.clear()並返回,我明白它不會返回,但它也需要一些東西?請幫忙。對不起,英文不好,我是通過翻譯寫的。

+2

您可能需要閱讀http://en.cppreference.com/w/cpp/io/basic_ios/clear的文檔,而大多數時候cppreference.com比cplusplus.com更值得信賴(兩者都不是官方的)。 – 2014-10-28 15:51:53

+0

「我不太明白」狀態「是什麼」「 - 你是否按照該頁面的[鏈接](http://www.cplusplus.com/reference/ios/ios_base/iostate/)參考了」iostate '?對於那些在思想上反對cplusplus.com的人來說,還有另一個參考文獻[這裏](http://en.cppreference.com/w/cpp/io/ios_base/iostate)。 – 2014-10-28 15:53:54

+0

clear()只是刪除所有標誌並設置參數指定的標誌。默認情況下,該參數是'goodbit',所以它默認清除所有標誌。 – 0x499602D2 2014-10-30 01:20:50

回答

1

功能std::basic_ios<>::clear()影響 std::ios_base::iostate位,這是,在大多數情況下, 錯誤條件。該標準定義了「四個一」位:

badbit
設定:如果最後輸入失敗,因爲某些硬件故障,例如 磁盤上發生讀取錯誤。 (在實踐中,我不知道該 所有實現檢查此,我懷疑有些人會 只是把它當作如果有文件的末尾。)
failbit
設定:如果最後輸入除了 之外,由於某種原因而失敗,這將設置 badbit。最常見的 原因是一個格式錯誤(當輸入中的下一個字符爲「abc」`時試圖讀取一個'int')並遇到文件_before_的末尾,該文件已經能夠爲 請求的輸入讀取足夠的數據。
eofbit
這是_not_錯誤條件;只要 數據流看到文件結尾,它就會被設置。這可能是因爲它還需要另一個字符來解析輸入,在這種情況下, failbit也將被設置;但它也可能是 ,因爲輸入流在預讀中看到了文件的結尾。 (對於最後一種情況,請考慮輸入一個 int,其中 流中剩餘的字符爲「123」,而且沒有尾隨 空格,甚至沒有新行。字符,流必須嘗試到 後面讀取一個字符3.在這種情況下,它設置爲 eofbit,要記住它已經看到 文件的結尾,但它確實沒有設置 failbit,因爲「123」 是一個有效的完成輸入爲 int。)
goodbit
這甚至不是一個位模式,但在 其中沒有前述的比特被設置簡單的特殊值。

在大多數情況下,failbiteofbit僅在 輸入有關;如果磁盤 已滿,您將得到(或應該得到)badbit的輸出。