【问题标题】:Are "x" and "u" printf/scanf conversion specifiers equally applicable to the same types?“x”和“u” printf/scanf 转换说明符是否同样适用于相同类型?
【发布时间】:2018-03-30 13:42:59
【问题描述】:

假设我有

printf("%llu %llx", one, two);

然后onetwo 都可以是unsigned long long 类型,区别只是它们分别打印为十进制或十六进制。

有一大堆宽度说明符(hhhLI 等),看起来它们中的每一个都可以与 ux 转换说明符一起使用,但是每次我被允许传递正确宽度的无符号类型的值。

无论它是否以xu 结尾并且前面具有相同的宽度说明符,我都可以传递相同时间的值并且它总是合法的吗?

【问题讨论】:

  • 你看过the documentation吗?
  • @Kevin 是的,当然,我正在寻找机会。
  • x/Xu(和 o)对于每个宽度说明符都有相同的类型。这不是你要问的吗?
  • 没有问题。 (efg 格式说明符也是如此:给定的数据可以以不同的方式呈现。)
  • ouxX 对于给定的宽度说明符都期望相同的参数类型。

标签: c++ c printf format-specifiers


【解决方案1】:

无论它是否以xu 结尾并且前面具有相同的宽度说明符,我都可以同时传递相同时间的值并且它总是合法的吗?

是的,如果宽度说明符对其中一个有效,那么它对两者以及oX 都有效,并且生成的指令服务于相同的数据类型——无符号指定宽度的整数。唯一的区别是输出的格式(或scanf,输入的预期格式)。

有一大堆宽度说明符(hhhLI 等)和外观 就像它们中的每一个都可以与 u 和 x 转换说明符一起使用 但每次我被允许传递正确的无符号类型的值 宽度。

确实有各种各样的宽度说明符。它们中的大多数(但不是全部)都适用于整数类型,包括对应于xXou 的无符号类型以及对应于d 和@ 的有符号类型987654335@。但是,该标准没有在其中指定L,并且根本没有指定I。不过,某些实现可能会接受这些作为整数宽度说明符,并具有特定于实现的行为。

【讨论】:

    猜你喜欢
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    相关资源
    最近更新 更多