私のプログラムに何か奇妙なことが起こっています。現在、プログラムで多くのスレッドを使用しており、ここにすべてを貼り付けるのは現実的ではありません。
しかし、これは私の問題です:
int value = 1000;
std::cout << value << std::endl;
//output: 3e8
私の出力が3e8である理由は何ですか?
小数値を出力するように修正するコマンドは何ですか?
前もって感謝します!:)
std::cout
他のスレッドが、ストリームのデフォルトの出力基数を 16 進数に変更しました。1000 10 = 3e8 16であることに注意してください1000 == 0x3e8
。
プログラムのどこかで、次のような呼び出しが行われます。
std::cout << std::hex << value;
使用されています。出力を通常(10進数)に戻すには、次を使用します。
std::cout << std::dec;
std::coutで数値を出力するさまざまな方法への関連リンクを次に示します。
また、以下のコメントで指摘されているように、coutフラグを安全に変更する標準的な方法は次のようになります。
ios::fmtflags cout_flag_backup(cout.flags()); // store the current cout flags
cout.flags ( ios::hex ); // change the flags to what you want
cout.flags(cout_flag_backup); // restore cout to its original state
以下のコメントで述べられているように、IOストリームを使用するときは、スレッドとストリームの間に何らかの形式の同期を設定することをお勧めします。つまり、2つのスレッドが同じものを使用できないようにすることも賢明です。一度にストリーミングします。
これを行うと、おそらくストリーム呼び出しも一元化されます。つまり、将来、このようなものをデバッグするのがはるかに簡単になります。
ここにあなたを助けるかもしれないSOの質問があります
別のスレッドが cout で出力を 16 進数に変更した可能性があります。これらのストリームがスレッドセーフであるとは思えません。