printf() 格式控制符的完整形式如下:
%[flag][width][.precision]type
[]中的内容可以省略
- type表示要输出的类型,如%d,%c等,此项必须有,具体的格式控制符见下表
- flag表示输出的最小宽度,如果宽度不足,即小于width,输出时会用空格补齐;如果宽度大于width,限制不再起作用,直接按照数据本身的长度进行输出
#include<stdio.h>
int main()
{
int a = 123;
float b = 9.8;
char c = 'a';
char *str = "abcdefghijklmn";
printf("%10d%12f%4c%8s",a,b,c,str);
return 0;
}
返回的结果是
可以发现,a在输出时,加上前面空格的长度,一共是10个单位。同样,b在输出时一共也是占了12个位置。然而在字符串str的输出时,他本身的长度就差超过了8个位置,所以正常输出。
- .precision表示小数的输出精度,也就是小数的位数
要强调的是,如果数据本身比要求输出的精度要长,这里会四舍五入
如果数据比要求的精度短,就会在结尾补上0
- flag时标志字符。
如果要输出一组数据,要求左对齐,就可以使用‘-’
#include <stdio.h>
int main()
{
int a1 = 20, a2 = 345, a3 = 700, a4 = 22;
int b1 = 56720, b2 = 9999, b3 = 20098, b4 = 2;
int c1 = 233, c2 = 205, c3 = 1, c4 = 6666;
int d1 = 34, d2 = 0, d3 = 23, d4 = 23006783;
printf("%-9d %-9d %-9d %-9d\n", a1, a2, a3, a4);
printf("%-9d %-9d %-9d %-9d\n", b1, b2, b3, b4);
printf("%-9d %-9d %-9d %-9d\n", c1, c2, c3, c4);
printf("%-9d %-9d %-9d %-9d\n", d1, d2, d3, d4);
return 0;
}
结果是
这样就实现了左对齐的要求(正数时是右对齐,负数时是左对齐)
如果要求输出带正负号的数字,就要使用‘+’
#include<stdio.h>
int main()
{
int a = 1,b = -1;
printf("%+d %+d\n",a,b);
return 0;
}
输出结果就是