c/c++语言开发共享关于C中的printf格式字符串

我们采取以下计划:

#include  int main() { long t =57 ; printf("[%+03ld]", t); } 

它的输出:

 [+57] 

我有点困惑:我告诉他将输出填充到宽度3( 03ld ),用零,但是似乎如果我强制输出在数字( + )之前加一个加号,它将不会添加所需的零如果数字的长度已经是2位数(如57中所示)。 对于数字<10,它填充1为零。

来自https://www.cplusplus.com/reference/cstdio/printf/

(0) – >当指定填充时,用零填充数字(0)而不是空格(参见width子说明符)。

(+) – >即使对于正数,也要在结果前加上加号或减号(+或 – )。 默认情况下,只有负数前面带有 – 符号。

(宽度) – >要打印的最小字符数。 如果要打印的值小于此数字,则结果将填充空格。 即使结果较大,也不会截断该值。

所以我只需要澄清……上面引用的(width)说明符指的是由此格式说明符( "%+03ld" )控制的输出字符串的全长(即:将要打印的字符)或要打印的数字的全长字符?

    是的,宽度说明符指的是整个格式化结果的宽度,在您的情况下为+57 。 这使得它可以用于打印柱状文本以便在屏幕上阅读(如果您使用C编写旧式文本实用程序,这很重要!)。

    C标准相当精确,转换值是一个整体。 从C11§7.21.6/ 2(强调我的):

    fprintf函数在由格式指向的字符串的控制下将输出写入stream指向的stream ,该格式指定后续参数如何转换为输出

    以及§7.21.6/ 4:

    可选的最小字段宽度 。 如果转换后的值的字符数少于字段宽度,则在字段宽度上用左侧(或右侧,如果左侧调整标志,稍后描述)填充空格(默认情况下)。 字段宽度采用星号*(稍后描述)或非负十进制整数的forms。

    当你引用“要打印的最小字符数”时,所以“+”只是printf的另一个字符。 顺便说一句,零“0”只是字符,与数字无关。 它可以是任何角色。

    是的,字段宽度是指完整的转换值,包括小数点,符号等。

    您要求长度为3个字符的格式,并获得3个字符+57 。 如果你想要0,只需使用printf("[%+04ld]", t); 你会得到+057

      以上就是c/c++开发分享关于C中的printf格式字符串相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/541815.html

      (0)
      上一篇 2021年1月4日
      下一篇 2021年1月4日

      精彩推荐