打印格式标志

C 标准(C11 和 C99 也是)为 printf() 定义了以下标志:

标志 转换 含义
- 所有 转换的结果应在字段内左对齐。如果未指定此标志,则转换是右对齐的。
+ 签名数字 签名转换的结果应始终以符号(’+‘或’ - ‘)开头。只有在未指定此标志的情况下转换负值时,转换才应以符号开头。
<space> 签名数字 如果签名转换的第一个字符不是符号,或者签名转换不会产生任何字符,则应将 <space> 作为结果的前缀。这意味着如果出现 <space> 和’+‘标志,则应忽略 <space> 标志。
# 所有 指定将值转换为替代形式。对于 o 转换,它将增加精度,当且仅在必要时,强制结果的第一个数字为零(如果值和精度都为 0,则打印单个 0)。对于 xX 转换说明符,非零结果应以 0x(或 0X)为前缀。对于 aAeEfFgG 转换说明符,结果应始终包含基数字符,即使基数字符后面没有数字。如果没有此标志,只有在跟随数字后,才会在这些转换的结果中显示基数字符。对于 gG 转换说明符,不应像通常那样从结果中删除尾随零。对于其他转换说明符,
0 数字 对于 d,i,o,u,x,X,a,A,e,E,f,F,g 和 G 转换说明符,前导零(跟随符号或基数的任何指示)用于填充到字段宽度而不是执行空间填充,除非转换无穷大或 NaN。如果同时出现'0’和’ - ‘标志,则忽略'0’标志。对于 d,i,o,u,x 和 X 转换说明符,如果指定了精度,则应忽略 0 标志。 ⌦如果同时出现'0’和 <apostrophe> 标志,则在零填充之前插入分组字符。对于其他转换,行为未定义。 ⌫

Microsoft 也支持这些标志具有相同的含义。

printf() 的 POSIX 规范增加了:

标志 转换 含义
' 我,d,u,f,F,g,G 十进制转换结果的整数部分应使用数千个分组字符进行格式化。对于其他转换,行为未定义。使用非货币分组字符。