printf() 格式控制符的完整形式如下:
%[flag][width][.precision]type
[ ] 表示此处的内容可有可无,是可以省略的。
1) type 表示输出类型,比如 %d、%f、%c、%lf,type 就分别对应 d、f、c、lf;再如,%-9d中 type 对应 d。
type 这一项必须有,这意味着输出时必须要知道是什么类型。
2) width 表示最小输出宽度,也就是至少占用几个字符的位置;例如,%-9d中 width 对应 9,表示输出结果最少占用 9 个字符的宽度。
当输出结果的宽度不足 width 时,以空格补齐(如果没有指定对齐方式,默认会在左边补齐空格);当输出结果的宽度超过 width 时,width 不再起作用,按照数据本身的宽度来输出。
下面的代码演示了 width 的用法:
#include
int main(){
int n = 234;
float f = 9.8;
char c = '@';
char *str = "' target='_blank'>[/reply]' target='_blank'>' target='_blank'>[/reply][/reply]";
printf("%10d%12f%4c%8s", n, f, c, str);
return 0;
}
运行结果:
234 9.800000 @' target='_blank'>[/reply]' target='_blank'>' target='_blank'>[/reply][/reply]
对输出结果的说明:
n 的指定输出宽度为 10,234 的宽度为 3,所以前边要补上 7 个空格。
f 的指定输出宽度为 12,9.800000 的宽度为 8,所以前边要补上 4 个空格。
str 的指定输出宽度为 8,"' target='_blank'>[/reply]' target='_blank'>' target='_blank'>[/reply][/reply]" 的宽度为 22,超过了 8,所以指定输出宽度不再起作用,而是按照 str 的实际宽度输出。
3) .precision 表示输出精度,也就是小数的位数。
当小数部分的位数大于 precision 时,会按照四舍五入的原则丢掉多余的数字;
当小数部分的位数小于 precision 时,会在后面补 0。
另外,.precision 也可以用于整数和字符串,但是功能却是相反的:
用于整数时,.precision 表示最小输出宽度。与 width 不同的是,整数的宽度不足时会在左边补 0,而不是补空格。
用于字符串时,.precision 表示最大输出宽度,或者说截取字符串。当字符串的长度大于 precision 时,会截掉多余的字符;当字符串的长度小于 precision 时,.precision 就不再起作用。

举报 0