关于C中的printf格式字符串
让我们看一下下面的节目:关于C中的printf格式字符串,c,printf,format-specifiers,C,Printf,Format Specifiers,让我们看一下下面的节目: #include <stdio.h> int main() { long t =57 ; printf("[%+03ld]", t); } 我不知怎么搞糊涂了:我告诉他用零填充宽度3(03ld)的输出,但是,如果我强制输出在数字(+)前加一个加号,那么如果数字的长度已经是2位数字(如57所示),就不会添加所需的零。对于数字,在指定填充时,左填充数字为零(0),而不是空格(请参见宽度子说明符) (+)->强制使用加号或减
#include <stdio.h>
int main()
{
long t =57 ;
printf("[%+03ld]", t);
}
我不知怎么搞糊涂了:我告诉他用零填充宽度3(03ld
)的输出,但是,如果我强制输出在数字(+
)前加一个加号,那么如果数字的长度已经是2位数字(如57所示),就不会添加所需的零。对于数字,在指定填充时,左填充数字为零(0),而不是空格(请参见宽度子说明符)
(+)->强制使用加号或减号(+或-)来处理结果,即使对于正数也是如此。默认情况下,只有负数前面带有-号
(宽度)->要打印的最小字符数。如果要打印的值小于此数字,则结果将用空格填充。即使结果更大,该值也不会被截断
所以我只需要澄清一下。。。上面引号中的
(宽度)
说明符是指由该格式说明符(“%+03ld”
)控制的输出字符串的全长(即:将要打印的字符)或将要打印的数字的字符的全长?是,宽度说明符是指整个格式化结果的宽度,在您的案例中为+57
。这使得它对于在屏幕上打印柱状文本非常有用(如果您使用C编写老式的文本实用程序,这一点很重要!)。正如您引用的“要打印的最小字符数”,因此“+”只是printf的另一个字符。顺便说一句,零“0”也只是字符,与数字无关。它可以是任何字符。是的,字段宽度指的是完整的转换值,包括小数点、符号等。C标准相当精确,转换值是一个整体。根据C11第7.21.6/2节(重点):
fprintf
函数将输出写入流
指向的流
,
由指定如何使用的格式指向的字符串控制
后续参数被转换为输出
连同§7.21.6/4:
可选的最小字段宽度。如果转换后的值小于
如果字符数大于字段宽度,则会用空格填充(默认情况下)
在左侧(或右侧,如果左侧调整标志(稍后描述),
已给定)的字段宽度。字段宽度
采用星号*(稍后描述)或非负十进制整数的形式
您要求3个字符的长度格式,得到3个字符
+57
。如果希望0存在,只需使用printf(“[%+04ld]”,t)你将得到+057
“(宽度)->要打印的最小字符数。”我不知道你还需要什么;这是最清楚的了。
[+57]