gpt4 book ai didi

c - 为什么 "%.3i"打印前导零?

转载 作者:太空宇宙 更新时间:2023-11-04 01:15:53 25 4
gpt4 key购买 nike

今天的一些代码有点意外。我在 AIX 上编译它,将警告级别设置为 anal 以查看可能潜伏着哪些流氓问题。从代码中爬出了一些新东西。

 1540-2837 (W) '0' flag is disregarded when combined with 
precision and 'i' printf format.

查看违规行后,我编写了一个小程序来重现它。在多个平台上对其进行测试表明它不是特定于 AIX 的。

下面的第一个 printf 模拟了程序中的内容。

#include <stdio.h>    
int main(void)
{
int x = 3;

printf("Format 0.3i <%0.3i>\n", x); // prints 003, and AIX does a warning
printf("Format .3i <%.3i>\n", x); // prints 003, with no warning
printf("Format 3i <%3i>\n", x); // prints 3, with no warning.

return 0;
}

通常,如果需要前导零,“03i”格式就可以很好地完成这项工作。

这里的“%.3i”到底是什么意思?

为什么它有这样的行为?

最佳答案

.X,其中 x 是一个数字,表示“至少打印 X”位数字,因此 %.3i 表示至少打印 3 位数字。如果数字小于 100,则用零填充。

来自doc on printf

"对于整数说明符(d, i, o, u, x, X): precision 指定要写入的最小位数。如果要写入的值短于此数字,则结果用前导填充零。即使结果更长,该值也不会被截断。精度为 0 意味着没有为值 0 写入任何字符。”

还有一个概念,“width”(例如“%3i”)会导致输出一定数量的字符(不一定是数字,指定的 0 用于表示这些字符应该是 0,如"003"而不是空格,如 "3")

关于c - 为什么 "%.3i"打印前导零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/567513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com