C语言的printf
函数提供了丰富的格式化输出功能,使得可以精确控制输出数据的格式。这里给出一个更完整的指南,包括常用的格式说明符、修饰符以及它们的用法。
基本格式说明符
%d
或%i
:输出有符号十进制整数。%u
:输出无符号十进制整数。%f
:输出十进制浮点数。%lf
:输出双精度浮点数。在C99标准之前,printf
用%f
来输出double
,因为float
类型的参数会被提升为double
。%e
或%E
:以科学计数法输出浮点数。%g
或%G
:根据数值大小自动选择%f
或%e
(%E
)。%x
或%X
:以十六进制形式输出无符号整数。%x
使用小写字母,%X
使用大写字母。%o
:以八进制形式输出无符号整数。%c
:输出单个字符。%s
:输出字符串。%p
:输出指针的值。%%
:输出%
字符本身。
修饰符
修饰符可以用来修改基本格式说明符的行为,例如调整输出宽度、精度或者是输出数据的长度。
- 宽度:指定最小输出宽度。如果数据的实际宽度小于指定宽度,
printf
将用空格填充(或其他填充,见下文)以满足宽度要求。例如,%5d
表示输出的整数至少占5个字符宽度。 - 精度:对于整数,精度指定了最小的数字位数。如果整数的位数少于指定的精度,结果将在前面填充零以达到指定的位数。对于浮点数,精度指定了小数点后的数字位数。例如,
%.2f
表示浮点数输出时保留两位小数。精度通过在%
和说明符之间添加点.
和数字来指定,如%.3d
。 - 左对齐:默认情况下,输出是右对齐的,如果你想要左对齐输出,可以在宽度前加
-
修饰符,例如%-5d
。 - 显示正号:使用
+
修饰符会在正数前面显示加号,例如%+d
。 - 空格:如果输出值为正数,
% d
。 #
:对不同类型的输出有不同的影响。例如,对于八进制数前加0
,十六进制数前加0x
或0X
,对于%g
或%G
保留小数点后的零。- 长度修饰符:指定整数或浮点数的大小或长度。例如,
%ld
用于long int
类型,%llu
用于unsigned long long int
类型。
#include <stdio.h>
int main() {
printf("%9d\n", 123); // 右对齐,至少9个字符宽
printf("%09d\n", 123); // 右对齐,至少9个字符宽,不够补0
printf("%-9d\n", 123); // 左对齐,至少9个字符宽
printf("%.5d\n", 123); // 至少5位数字,不足前面补零
printf("%+d\n", 123); // 显示正号
printf("% d\n", 123); // 正数前空格
printf("%x\n", 255); // 十六进制小写
printf("%#x\n", 255); // 十六进制小写,0x前缀
printf("%.3f\n", 3.14159); // 浮点数,保留3位小数
printf("%6.2f\n", 3.14159); // 至少6个字符宽,保留2位小数
printf("%*.*f\n", 6, 2, 3.14159); // 使用参数指定宽度和精度
return 0;
}
运行结果如下: