- 对于整数 n,
.precision
表示最小输出宽度。n 本身的宽度为 6,当 precision 为 9 时,大于 6,要在 n 的前面补3 个 0;当 precision 为 4 时,小于 6,不再起作用。 - 对于浮点数 f,
.precision
表示输出精度。f 的小数部分有 6 位数字,当 precision 为 2 或者 4 时,都小于 6,要按照四舍五入的原则截断小数;当 precision 为 10 时,大于 6,要在小数的后面补四个 0。 - 对于字符串 str,
.precision
表示最大输出宽度。str 本身的宽度为 9,当 precision 为 5 时,小于 9,要截取 str 的前 5 个字符;当 precision 为 15 时,大于 9,不再起作用。
如例子所示:
#include <stdio.h>
int main(int argc, const char * argv[]) {
int n = 123456;
double f = 882.923672;
char *str = "abcdefghi";
printf("n: %.9d %.4d\n", n, n);
printf("f: %.2lf %.4lf %.10lf\n", f, f, f);
printf("str: %.5s %.15s\n", str, str);
}
打印结果:
n: 000123456 123456
f: 882.92 882.9237 882.9236720000
str: abcde abcdefghi
flag
是标志字符。例如,%#o
中 flag 对应 #
,%-9d
中 flags 对应-
。
标志字符 | 含义 |
---|---|
- |
- 表示左对齐。如果没有,就按照默认的对齐方式,默认一般为右对齐。 |
+ |
+ 用于整数或者小数,表示输出符号(正负号)。如果没有,那么只有负数才会输出符号。 |
空格 | 用于整数或者小数,输出值为正时冠以空格,为负时冠以负号。 |
# | 1、对于八进制(%o)和十六进制(%x / %X)整数,# 表示在输出时添加前缀;八进制的前缀是 0, 十六进制的前缀是 0x / 0X。2、对于小数(%f/%e/%g),# 表示强迫输出小数点。如果没有小数部分,默认是不输出小数点的, 加上 # 以后,即使没有小数部分也会带上小数点。 |
例如:
#include <stdio.h>
int main(int argc, const char * argv[]) {
int m = 192, n = -943;
float f = 84.342;
printf("m=%10d, m=%-10d\n", m, m); //演示 - 的用法
printf("m=%+d, n=%+d\n", m, n); //演示 + 的用法
printf("m=% d, n=% d\n", m, n); //演示空格的用法
printf("f=%.0f, f=%#.0f\n", f, f); //演示#的用法
return 0;
}
输出:
m= 192, m=192
m=+192, n=-943
m= 192, n=-943
f=84, f=84.