0

我的程序发生了一些奇怪的事情。我目前在我的程序中使用了很多线程,在这里粘贴所有内容是不可行的。

然而这是我的问题:

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

知道为什么我的输出是 3e8 吗?

修复它以打印十进制值的命令是什么?

提前致谢!:)

4

3 回答 3

11

其他一些线程将std::cout流的默认输出基数更改为十六进制。请注意 1000 10 = 3e8 16,即1000 == 0x3e8

于 2012-08-28T11:53:27.380 回答
6

在您的程序中的某处调用,例如:

std::cout << std::hex << value;

已经用过。要将输出恢复为正常(十进制),请使用:

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 流时,最好在线程和流之间进行某种形式的同步,也就是说,确保没有两个线程可以使用相同的线程。一次流。
这样做可能还会集中您的流调用,这意味着将来调试这样的东西会容易得多。
这是一个可以帮助你的问题

于 2012-08-28T11:58:02.700 回答
3

可能是另一个线程在 cout 上将输出更改为十六进制。我怀疑这些流是线程安全的。

于 2012-08-28T11:53:32.480 回答