printf(格式控制字符串,输出列表);
其中,
"格式控制字符串"
是用双引号括起来的一个字符串。包括:
普通字符:普通字符即需要在输出时原样输出的字符。
占位符:由“%”和格式字符组成。这个位置可以用其它值代入。
"输出列表"
是程序需要输出的一些数据,可以是常量、变量或表达式。用于替换占位符的位置。
注意:printf() 参数与占位符是一一对应关系。如果参数个数少于对应的占位符, printf() 可能会输出内存中的任意值。
????????占位符的第一个字符是 %
,第二个字符表示占位符的类型。占位符有许多种类,与 C 语言的数据类型相对应。
????????下面按照字母顺序,列出占位符如下,方便查阅(红色为常用的):
????????限定占位符的最小宽度。
printf("%5d\n", 123); // 输出为 " 123"
????????说明:%5d 表示这个占位符的宽度至少为5位。如果不满5位,对应的值的前面会添加空格。
????????输出的值默认是右对齐,即输出内容前面会有空格;如果希望改成左对齐,在输出内容后面添加空格,可以在占位符的 % 的后面插入一个 - 号。
printf("%-5d\n", 123); // 输出为 "123 "
????????对于小数,这个限定符会限制所有数字的最小显示宽度
printf("%12f\n", 123.45); // 输出 " 123.450000"
????????%12f 表示输出的浮点数最少要占据12位。由于小数的默认显示精度是小数点后6位,所以123.45 输出结果的头部会添加2个空格。
????????默认printf() 不对正数显示 + 号,只对负数显示 - 号。如果想让正数也输出 + 号,可以在占位符的 % 后面加一个 + 。
printf("%+d\n", 11); // 输出 +11
printf("%+d\n", -11); // 输出 -11
????????输出小数时,有时希望限定小数的位数。举例来说,希望小数点后面只保留两位,占位符可以写成 %.2f 。
?printf("Number is %.2f\n", 0.8); // 输出 Number is 0.80
????????这种写法可以与限定宽度占位符,结合使用。
?printf("%6.2f\n", 0.8); // 输出为 " 0.80"
????????说明:%6.2f 表示输出字符串最小宽度为6,小数位数为2。整体长度不足 6 位时,右对齐显示。
????????最小宽度和小数位数这两个限定值,都可以用 * 代替,通过 printf() 的参数传入。
printf("%*.*f\n", 6, 2, 0.8);
?//等同于
printf("%6.2f\n", 0.8);
float f = 3.123456789f; // 单精度浮点数
double d = 3.123456789; // 双精度浮点数
printf("i am float = %.9f\n",f); // 输出结果:i am float = 3.123456717
printf("i am double = %.9lf\n",d); // 输出结果:i am double = 3.123456789
我们可以发现,float只有小数点后7位的精度