当前位置:  开发笔记 > 小程序 > 正文

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

如何解决《为什么"%.3i"打印前导零?》经验,为你挑选了1个好方法。

今天的代码有些令人惊讶.我在AIX上编译它,将警告级别设置为anal,以查看潜在的问题可能潜伏在哪里.从代码中抓取的新东西.

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

看完有问题的一行之后,我整理了一个小程序来重现它.在几个平台上测试它表明它不是AIX特有的.

下面的第一个printf模仿程序中发现的内容.

#include     
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"在这里真正意味着什么?

它为什么会有这样的行为?



1> Daniel LeChe..:

.X,其中x是数字意味着"打印至少X"个数字,因此%.3i表示打印至少3个数字.如果数字小于100,则用零填充.

来自printf上的doc

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

还有另一个概念,"宽度"(例如"%3i"),它会导致输出一定数量的字符(不一定是数字,而指定的0用于表示那些字符应为0,如"003"中所示)而不是空格,如"3")

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有