1
例如,我可以只清除失敗位標誌嗎? ios :: clear似乎清除所有的標誌,或設置個別的標誌。 ios :: setstate似乎也設置了單個標誌,但沒有清除它們。可以清除流的單個錯誤狀態標誌嗎?
的原因,我問的是,因爲我如果設置不希望清除badbit。
例如,我可以只清除失敗位標誌嗎? ios :: clear似乎清除所有的標誌,或設置個別的標誌。 ios :: setstate似乎也設置了單個標誌,但沒有清除它們。可以清除流的單個錯誤狀態標誌嗎?
的原因,我問的是,因爲我如果設置不希望清除badbit。
要清除只是failbit
用於例如std::cin
,您可以使用
std::cin.clear(std::cin.rdstate() & ~std::ios::failbit);
您需要的位與rdstate()
之間,你要清除的標誌位的否定,否則你只是在設置該標誌。如果你仔細想一想,這是有道理的:rdstate()
返回設置標誌的狀態,然後將它與你想擦除的標誌的否定相擦除,只是擦除該標誌而沒有其他修改。
謝謝!你是怎麼學習的?另外,如果我使用std :: ios :: failbit或std :: ios_base :: failbit,這有什麼關係嗎? –
記得閱讀有關[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