1. ホーム
  2. c++

[解決済み] ストリングストリームをクリアするには?重複

2022-07-10 12:16:07

質問

stringstream parser;

parser << 5;
short top = 0;
parser >> top;
parser.str(""); //HERE I'M RESETTING parser

parser << 6; //DOESN'T PUT 6 INTO parser
short bottom = 0;
parser >> bottom;

なぜうまくいかないのか?

どのように解決するのですか?

通常、stringstream を 'リセット' するには、基礎となるシーケンスを空文字列にリセットするために str を使い、fail や eof フラグをクリアする必要があります。 clear .

parser.str( std::string() );
parser.clear();

通常、何が起こるかというと、最初の >> が文字列の末尾に到達して eof ビットがセットされ、最初の short が正常にパースされることです。これ以降のストリームでの操作は、ストリームの eof ビットがまだ設定されているため、直ちに失敗します。