0

私のプログラムに何か奇妙なことが起こっています。現在、プログラムで多くのスレッドを使用しており、ここにすべてを貼り付けるのは現実的ではありません。

しかし、これは私の問題です:

int value = 1000;
std::cout << value << std::endl;
//output:  3e8

私の出力が3e8である理由は何ですか?

小数値を出力するように修正するコマンドは何ですか?

前もって感謝します!:)

4

3 に答える 3

11

std::cout他のスレッドが、ストリームのデフォルトの出力基数を 16 進数に変更しました。1000 10 = 3e8 16であることに注意してください1000 == 0x3e8

于 2012-08-28T11:53:27.380 に答える
6

プログラムのどこかで、次のような呼び出しが行われます。

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ベースフラグへのリンク


以下のコメントで述べられているように、IOストリームを使用するときは、スレッドとストリームの間に何らかの形式の同期を設定することをお勧めします。つまり、2つのスレッドが同じものを使用できないようにすることも賢明です。一度にストリーミングします。
これを行うと、おそらくストリーム呼び出しも一元化されます。つまり、将来、このようなものをデバッグするのがはるかに簡単になります。
ここにあなたを助けるかもしれないSOの質問があります

于 2012-08-28T11:58:02.700 に答える
3

別のスレッドが cout で出力を 16 進数に変更した可能性があります。これらのストリームがスレッドセーフであるとは思えません。

于 2012-08-28T11:53:32.480 に答える