当数字的顺序与格式不对应时,为什么printf函数按顺序打印结果?

gas*_*oon 0 c printf format-specifiers

当我运行以下代码时:

printf("%d %f %d %d %f\n", 1.2 , 3000, 2.5, 400, 500);
Run Code Online (Sandbox Code Playgroud)

我认为答案可能是一些毫无意义的数字,但结果实际上是:

3000 1.200000 400 500 2.500000
Run Code Online (Sandbox Code Playgroud)

这与我输入的数字和格式相同.

它是如此有意义,以至于我无法说服自己忽视它.

有人能告诉我原因吗?我会很感激.

ps我正在使用Clion作为我的IDE.

Sou*_*osh 7

为给定的格式说明符提供不合适的类型是未定义的行为,您永远不能"证明"结果.它可能看起来做工精细,但你永远不知道,在内部可能你所有的钱被转移到一些其他的帐户!

引用C11,章节§7.21.6.1,P9

[...]如果任何参数不是相应转换规范的正确类型,则行为未定义.

在你的情况下,

  • %d期待int,你提供double(字面1.2是一个double)
  • %f期待double你,你提供了一个int.

所以,你导致UB.只是不要这样做.