質問

現在、次のように std :: ofstream を使用しています:

std::ofstream outFile;
outFile.open(output_file);

次に、次のように std :: stringstream オブジェクトを outFile に渡します:

GetHolesResults(..., std::ofstream &outFile){
  float x = 1234;
  std::stringstream ss;
  ss << x << std::endl;
  outFile << ss;
}

今、 outFile にはゴミのみが含まれています:&quot; 0012E708&quot;繰り返しました。

GetHolesResults で記述できます

outFile << "Foo" << std:endl; 

そして outFile で正しく出力されます。

間違っていることについて何か提案はありますか?

役に立ちましたか?

解決

これを行うことができますが、文字列を作成する必要はありません。出力ストリームに右側のストリームのコンテンツを読み取らせます(任意のストリームで使用可能)。

outFile << ss.rdbuf();

他のヒント

std :: ostringstream を使用していて、 ss.rdbuf()で何も書き込まれないのではないかと考えている場合は、 .str()を使用します関数。

outFile << oStream.str();

stringstream rdbufをストリームに渡すと、改行は翻訳されません。入力テキストには \ n を含めることができるため、検索置換は機能しません。古いコードはfstreamに書き込み、それをstringstreamに切り替えるとendl変換が失われます。

ss.rdbuf(); の代わりに ss.str(); と書きます(そして、文字列ストリームを使用します)。

ss.rdbuf()を使用すると、 outFile のformat-flagsがリセットされ、コードが再利用できなくなります。 つまり、 GetHolesResults(...、std :: ofstream&amp; outFile)の呼び出し元は、結果をテーブルに表示するために次のようなものを書きたいかもしれません:

outFile << std::setw(12) << GetHolesResults ...

...そして、なぜ幅が無視されるのか疑問に思う。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top