C ++ std :: printf("%u",5)在预期输出后添加一个数字

时间:2015-07-08 11:50:37

标签: c++ xcode printf

以下代码的输出为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;
}

如果我们尝试提供intunsigned longuint32_t,我已将%u替换为%d%lu ,但我总是得到相同的结果:一个奇怪的数字在预期的printf输出之后。将5换成另一个数字会导致另一个意外数字被添加到输出中。这是一个新项目,没有添加其他代码。我在俯瞰什么?

4 个答案:

答案 0 :(得分:3)

printf返回一个int。在您的情况下,它返回1,这是写入的字符数(5)。

cout1打印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::coutstd::printf

只有其中一个,像这样:

std::cout << 5 << std::endl;

std::printf("%u", t);

答案 3 :(得分:0)

你不应该将coutprintf混合在一起......发生的事情是printf返回打印的字符数(在你的情况下是一个字符,{{1} }})。因此,执行5语句,打印printf,然后5打印cout的返回值,添加额外的printf