依赖的头文件
#include <stdio.h>
声明
int printf(const char *format, ...);
描述
当前函数根据format内容写内容到到标准输出流(stdout)
format
定义
代表一串可以包含转换说明符的字符串
分类
包含转换说明符
转换说明符
定义
可以将augument (代表printf 中的"...")中的值转换成特定格式的内容
格式
%[flags][width].[precision][length modifier]"conversion specifier"
flags:
字符 % 后跟以下零个或多个标志:
-
# 该值应转换为“替代形式”。 对于 o 转换,输出字符串的第一个字符设置为零(如果还不是零,则为前缀 0)。 对于 x 和 X 转换,非零结果前面会附加字符串“0x”(对于 X 转换,则为“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 转换,转换后的值在左侧用零填充,而不是空格。 如果同时出现 0 和 - 标志,则忽略 0 标志。 如果使用数值转换(d、i、o、u、x 和 X)给出精度,则忽略 0 标志。 对于其他转换,行为未定义。
-
- 转换后的值将在字段边界上进行调整。 (默认值为正确对齐。 除 n 次转换外,转换后的值在右侧用空格填充,而不是在左侧用空格或零填充。 A - 如果两者都给定,则覆盖 0。
-
' ' (空格) 在有符号转换生成的正数(或空字符串)之前应留空。
-
+ 符号(+或-)应始终放在带符号转换产生的数字之前。 默认情况下,符号仅用于负数。 如果同时使用空格,则 A + 将覆盖空格。
上面的五个标志字符在 C 标准中定义。 SUSv2 指定另一个标志字符。
-
' 对于十进制转换(i、d、u、f、F、g、G),如果区域设置信息指示任何字符,则输出将使用千个分组字符进行分组。 请注意, 许多版本的 gcc(1) 无法解析这个选项, 并会发出警告。 SUSv2 不包括 %'F。 glibc 2.2 又增加了一个标志字符。
-
I 对于十进制整数转换(i、d、u),输出使用区域设置的替代输出数字(如果有)。 例如,从 glibc 2.2.3 开始,这将在波斯语 (“fa_IR”) 语言环境中提供阿拉伯语-印度语数字。
width:
- 可选的十进制数字字符串(首位数字不为零),用于指定最小字段宽度。
- 如果转换后的值的字符数少于字段宽度,则将在左侧(或右侧,如果已给出左调整标志)填充空格。
-
可以写“*”或“*m$”(对于一些十进制整数 m)来代替十进制数字字符串,以指定字段宽度分别在下一个参数或第 m 个参数中给出,该参数必须为 int 类型。(如果用的是* 则对应的数值应该在实际数据的前面,比如 宽度为4 printf("%*d\n", 4, 5); 如果用的是*m$, m 需要填写一个整形的数字(大于1),对应的数值,在实际数据之后, 比如宽度为4 printf("%*2$d\n"), 5, 4);)
- 负字段宽度作为“-”标志,