2017-01-24 30 views
1

例如,我可以只清除失敗位標誌嗎? ios :: clear似乎清除所有的標誌,或設置個別的標誌。 ios :: setstate似乎也設置了單個標誌,但沒有清除它們。可以清除流的單個錯誤狀態標誌嗎?

的原因,我問的是,因爲我如果設置不希望清除badbit。

回答

3

要清除只是failbit用於例如std::cin,您可以使用

std::cin.clear(std::cin.rdstate() & ~std::ios::failbit); 

您需要的位與rdstate()之間,你要清除的標誌位的否定,否則你只是在設置該標誌。如果你仔細想一想,這是有道理的:rdstate()返回設置標誌的狀態,然後將它與你想擦除的標誌的否定相擦除,只是擦除該標誌而沒有其他修改。

+0

謝謝!你是怎麼學習的?另外,如果我使用std :: ios :: failbit或std :: ios_base :: failbit,這有什麼關係嗎? –

+1

記得閱讀有關[C++標準庫]在流等(https://www.amazon.com/Standard-Library-Tutorial-Reference-2nd/dp/0321623215/ref=sr_1_1?ie=UTF8&qid=1485232621&sr=8 -1&keywords = the + c + standard + library),這是一個非常詳細的C++參考。關於第二個問題,'ios'是從'ios_base'(其中定義了常量)派生的,所以這兩個表示法是等價的。有關更多詳細信息,請參見[此問題](http://stackoverflow.com/q/19128054/3093378)。 – vsoftco