格式修饰符
最小域宽限定符
精度限定符
对齐输出
* 和 # 修饰符
格式修饰符
许多格式限定符都有修饰符用于稍微改变它们的含义。例如,可以规定最小域宽、小数位数及向左对齐。格式修饰符放在百分号与格式代码之间。
最小域宽限定符
百分号和格式代码之间的整数称为最小域宽限定符,它保证输出时用空格填充以达到最小域宽。如果串或数字长度比最小域宽长,就被完全打印出来。默认填充为空格。如果想用0填充,那么在域宽限定符前放一个0。
double item = 10.12304;
printf("%f\n", item);
printf("%10f\n", item);
printf("%012f\n", item);
输出如下:
10.123040
10.123040
00010.123040
精度限定符
精度限定符跟在最小域宽限定符后面(如果有),由一个点号后跟一个整数组成,准确含义依赖于它所修饰的数据类型。
当用%f,%e,%E限定符应用精度限定符与浮点数据时,它确定所显示的小数位数。
如果精度限定符为了%g或%G,则表示有效位数。
当修饰字符串时,表示最大域宽。如果串大于最大域宽,则舍去多余的字符。
当修饰整形数时,确定每个数字显示的最小位数。在这种情况下,用0来填充以达到要求的位数。
printf("%.4f\n", 123.1234567);
printf("%3.8d\n", 1000);
printf("%10.15s\n", "This is a simple test.");
输出如下:
123.1235
00001000
This is a simpl
对齐输出
默认时,所有输出均为右对齐。但可以通过在百分号后加一个减号来向域左边界对齐。
* 和 # 修饰符
最小域宽和精度限定符可以通过变元而不是常数提供给printf()。为了实现这一点,我们用*作为占位符。当扫描到格式串,printf将*与变元串中的参数按顺序匹配。
printf("%*.*f", 10, 4, 123.3);
// * . * f
如果g,G,f,E或e前面有符号#,就可以确保即使没有小数位也显示小数点。如果x或X前面有#,那么十六进制数将带0x前缀显示,在o前面加上会使打印的数字前面补0,#不能用于其他任何格式限定符。
__________________________________________________________________________
参考文献:
C++参考大全(第四版)