2017-01-24 1 views
1

たとえば、failbitフラグだけをクリアすることはできますか? ios :: clearはすべてのフラグをクリアするか、個々のフラグを設定するようです。 ios :: setstateは個々のフラグを設定しているようですが、クリアすることはできません。ストリームの個々のエラー状態フラグをクリアすることはできますか?

設定されていればbadbitをクリアしたくないので、私が求めている理由です。

答えて

3

たとえば、failbitをクリアするには、 std::cin、あなたは

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

は、あなたがそうでなければ、あなただけではフラグを設定している、ビット単位のAND rdstate()の間、あなたがクリアするフラグビットの否定を必要とする使用することができます。考えてみると意味があります:rdstate()はセットされたフラグの状態を返します。そして、消去したいフラグの否定とANDをとるだけで、そのフラグが消去され、それ以外は何も変更されません。

+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++リファレンスです。 2番目の質問に関して、 'ios'は' ios_base'(定数が定義されています)から派生しているので、両方の表記は同等です。詳細については、[この質問](http://stackoverflow.com/q/19128054/3093378)を参照してください。 – vsoftco

関連する問題