基本格式:
printf( 格式字符串, 待打印项1, 待打印项2,...);
比较难搞的点:
- 转换说明修饰符
演示实例1
int main()
{
char ch = 'A';
char str[20] = "www.runoob.com";
float flt = 10.234;
int no = 150;
double dbl = 20.123456;
printf("字符为 %c \n", ch);
printf("字符串为 %s \n", str);
printf("浮点数为 %f \n", flt);
printf("整数为 %d\n", no);
printf("双精度值为 %lf \n", dbl);
printf("八进制值为 %o \n", no);
printf("十六进制值为 %x \n", no);
return 0;
}
- 标记说明
- 转换符
演示实例2
#define PAGES 959
int main()
{
printf("*%d*\n", PAGES);
printf("*%2d*\n", PAGES);
printf("*%10d*\n", PAGES);
printf("*%-10d*\n", PAGES);
return 0;
}
执行结果:
- 第一个不带任何修饰符,对应的结果和带整数字段的宽度的转换说明相同
- 第二个宽度是2,该字段长度是3会自动扩展到3
- 第三个宽度是10个,所以两个 * 之间就会多了7个空格
- 第四个是多了 - 待打印项左对齐
演示实例3
int main()
{
const double RENT = 3852.99;
printf("*%f*\n", RENT);
printf("*%e*\n", RENT);
printf("*%4.2f*\n", RENT);
printf("*%3.1f*\n", RENT);
printf("*%10.3f*\n", RENT);
printf("*%10.3E*\n", RENT);
printf("*%10.3E*\n", RENT);
printf("*%+4.2f*\n", RENT);
printf("*%010.2f*\n", RENT);
return 0;
}
执行结果
- 第一个转换,字段宽度和小数点后面的位数均为系统默认设置,即字段宽度是容纳待打印数字所需的位数和小数点后打印6位数字。
- 第2个转换说明是%e。默认情况下,编译器在小数点的左侧打印1个数字,在小数点的右侧打印6个数字。这样打印的数字太多!解决方案是指定小数点右侧显示的位数,程序中接下来的4个例子就是这样做的。请注意,第4个和第6个例子对输出结果进行了四舍五入。另外,第6个例子用E代替了e。
- 第8个转换说明中包含了+标记,这使得打印的值前面多了一个代数符号(+)。0标记使得打印的值前面以0填充以满足字段要求。
- 转换说明%010.2f的第1个0【对于数值,用前导0代替空格,填充字段宽度】是标记,句点(.)之前、标记之后的数字是指定的字段宽度。
%010.2f感觉这个还挺难懂的,再做几个练习
int main()
{
const double RENT = 3852.99;
printf("*%09.2f*\n", RENT);
return 0;
}
执行结果: