printf 中的 # 标志如何工作?

2024-05-03

#include <stdio.h>
int main()
{
  float x;
  x=(int)(float)(double)(5.5);
  printf("%#u",x);
  return 0;
}

How the #printf 中的标志在这里起作用吗?

每次运行此代码时,我都会得到不同的(垃圾)值。

我知道#标志仅适用于o , 0x, 0X, e, E, f, g, G但是当它没有为整数定义时。

那么这是一个不明确的行为?当我使用上述标志时,我得到了正确的值。 那么请告诉我我是对还是错。


来自c11标准。

7.21.6.1。第6页:

#:

结果被转换为“替代形式”。对于 o 转换,它增加 精度,当且仅当必要时,强制结果的第一个数字为 零(如果值和精度均为 0,则打印单个 0)。对于 x(或 X) 转换时,非零结果的前缀为 0x(或 0X)。对于 a、A、e、E、f、F、g, 和 G 转换,始终转换浮点数的结果 包含小数点字符,即使其后没有数字。 (通常,一个 仅当数字为小数点字符时,这些转换的结果中才会出现小数点字符 )对于 g 和 G 转换,尾随零不会从 结果。对于其他转换,行为未定义.

因此,为了澄清,使用# with u未定义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

printf 中的 # 标志如何工作? 的相关文章

随机推荐