打印格式标志
C 标准(C11 和 C99 也是)为 printf()
定义了以下标志:
标志 | 转换 | 含义 |
---|---|---|
- |
所有 | 转换的结果应在字段内左对齐。如果未指定此标志,则转换是右对齐的。 |
+ |
签名数字 | 签名转换的结果应始终以符号(’+‘或’ - ‘)开头。只有在未指定此标志的情况下转换负值时,转换才应以符号开头。 |
<space> |
签名数字 | 如果签名转换的第一个字符不是符号,或者签名转换不会产生任何字符,则应将 <space> 作为结果的前缀。这意味着如果出现 <space> 和’+ ‘标志,则应忽略 <space> 标志。 |
# |
所有 | 指定将值转换为替代形式。对于 o 转换,它将增加精度,当且仅在必要时,强制结果的第一个数字为零(如果值和精度都为 0,则打印单个 0)。对于 x 或 X 转换说明符,非零结果应以 0x (或 0X )为前缀。对于 a ,A ,e ,E ,f ,F ,g 和 G 转换说明符,结果应始终包含基数字符,即使基数字符后面没有数字。如果没有此标志,只有在跟随数字后,才会在这些转换的结果中显示基数字符。对于 g 和 G 转换说明符,不应像通常那样从结果中删除尾随零。对于其他转换说明符, |
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 | 十进制转换结果的整数部分应使用数千个分组字符进行格式化。对于其他转换,行为未定义。使用非货币分组字符。 |