以下代码的输出为51
,而不是预期的5
。我在Mac OS Yosemite 10.10.4上使用Xcode 6.4和LLVM编译器。
#include <iostream>
int main(int argc, const char * argv[]) {
std::cout << std::printf("%u", 5) << std::endl;
return 0;
}
如果我们尝试提供int
,unsigned long
和uint32_t
,我已将%u
替换为%d
和%lu
,但我总是得到相同的结果:一个奇怪的数字在预期的printf
输出之后。将5
换成另一个数字会导致另一个意外数字被添加到输出中。这是一个新项目,没有添加其他代码。我在俯瞰什么?
答案 0 :(得分:3)
printf返回一个int。在您的情况下,它返回1
,这是写入的字符数(5
)。
cout
在1
打印printf
之后打印5
,因为您将它们链接在一起。
要获得5
,请说:
std::printf("%u\n", 5)
答案 1 :(得分:1)
printf返回打印字符数,因此printf本身打印“5”,然后打印“1”作为cout << result_of_print
你可能想要的是
std::cout << 5u << std::endl;
另外:避免将C样式输出(printf)与C ++样式(std :: cout)混合
答案 2 :(得分:0)
您同时使用std::cout
和std::printf
。
只有其中一个,像这样:
std::cout << 5 << std::endl;
或强>
std::printf("%u", t);
答案 3 :(得分:0)
你不应该将cout
和printf
混合在一起......发生的事情是printf
返回打印的字符数(在你的情况下是一个字符,{{1} }})。因此,执行5
语句,打印printf
,然后5
打印cout
的返回值,添加额外的printf
。