我们采取以下计划:
#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