‘数字’:用来指定打印字段的最小宽度,若该宽度容纳不下结果,则自动超过这个限制而使用更宽的字段:
printf("this is %6d \n", 65);
输出:this is 65
‘.数字’:看配合对象,若是%f等浮点格式说明符,则指定浮点数的精度,即小数点右边打印的数字的位数;对是%s,指定打印字符的最大数目;对整数格式,指定打印数字的最小位数(整数的精度?),不够的话用0做前导填充;若小数点后面没有数字,默认为0,即变成整数:
printf("this is /%.2f/\n", 65.3);
printf("this is /%.f/\n", 65.3);
printf("this is /%.3d/\n", 65);
输出:this is /65.30/
this is /65/
this is /065/
‘-’:减号,用来指定对齐方式,从上面一条结果我们可以看出,默认的对齐方式是右对齐的,而使用了‘-’,就表明要左对齐:
printf("this is /%6d/\n", 65);
printf("this is /%-6d/\n", 65);
输出:this is / 65/
this is /65 /
‘+’ :打印数字的符号,无论数字是正是负。一般情况下只配合有符号格式说明符使用,比如%+d, %+f;但是%+u、%+c等就会报错:
printf("this is %+c \n", 65);
输出:this is +65
‘ ’:这是一个空格,作用和‘+’是相似的,区别就是用空格代替了打印的‘+’;若和‘+’一起使用,由于其优先级较低,效果会被‘+’覆盖:
printf("this is /% -6d/\n", 65);
输出:this is / 65 /
可以看到65前面有一个空格。
‘0’:对于所有的数字格式,用前导0而不是空格来填充空白;若指定了整数精度或‘-’,则该标志失效:
printf("this is /%05d/\n", 65);
‘#’:主要用来打印八进制或十六进制的前导符号,偶尔也会配合浮点类型使用:
printf("this is /%#5x/\n", 65);
printf("this is /%#5o/\n", 65);
输出:this is / 0x41/
this is / 0101/
用于不同数字类型转换的各个修饰符,它们配合数字类型说明符一起使用: h: 表示一个short 或 unsigned short ,如 %hd hh:表示一个signed char 或 unsigned char,如%hhu %hhx l:表示一个long或unsigned long,如%lo,%ld ll:long long 或 unsigned long long,%llx L:long double t:只能配合整数类型,表示指针之间的差所对应的类型,注意不是指针类型本身,%td z:只能配合整数类型,表示一个size_t值,即sizeof返回值的类型,%zd