printf函数
printf函数被设计用来显示格式串的内容,并且在该串中的指定位置插入可能的值。调用printf函数必须提供格式串,格式串后面的参数是需要在显示是插入到该串中的值:
printf(格式串,表达式1,表达式2,…);
显示的值可以是常量,变量或者更加复杂的表达式,调用printf函数一次可以打印的值的个数没有限制。
格式串包含普通字符和转换说明,其中转换说明以字符%开头。转换说明是用来表示打印过程中待填充的值的占位符,跟随在字符%后面的信息指定了把数值从内部形式(二进制)转换成打印形式(字符)的方法,这也就是转换说明这一术语的由来。
例如说明%d指定printf函数把int类型值从二进制形式转换成十进制数字组成的字符串,转换说明%f对float型值也进行类似的转换。
例如:
#include<stdio.h>
int main(int argc, const char *argv[])
{
int i,j;
float x,y;
i = 10;
j = 20;
x = 43.2892f;
y = 5527.0f;
printf("i = %d,j = %d,x = %f,y = %f\n",i,j,x,y);
return 0;
}
运行结果:
格式串中的普通字符被简单复制给输出行,而变量i,j,x和y的值则依次替换了4个转换说明。
c语言编译器不会检测格式串转换说明的数量是否和输出项的数量相匹配。下面这个printf函数调用所拥有的转换说明的数量就多于要显示的值的数量。
printf("%d %d\n", i);
printf函数将正确显示变量i的值,接着显示另一个(无意义)整数值,函数调用带有太少的转换说明也会出现类似的问题。
printf("%d",i,j);
在这种情况 ,printf函数会显示变量i的值,但是不会显示变量j的值 。
此外,c语言编译器也不会检测转换说明是否适合要显示项的数据类型。如果程序员使用不正确的转换说明,程序将会简单地产生无意义的输出。思考下面的printf函数调用,其中int型变量i和float型变量x的顺序放置错误。
printf("%f %d\n",i,x);
因为printf函数必须服从于格式串,所以他将如实的显示出一个float型值,接着是一个int型值,可惜这两个值将是无意义的。
转换说明
转换说明给程序员提供了大量对输出格式的控制方法。另一方面,转换说和可能和复杂且难以阅读。事实上,这里也只是简单的介绍一些比较重要的性能。
转换说明可以包含格式化信息,具体来说,我们可以用%.1f来显示小说点后带一位数字的float型值,更一般的,转换说明可以用%m.pX格式或%-m.pX,这里的m和p都是整数常量,X是字母,m和p都是可选的。如果省略p,m和p之间的小数点也要去掉,在转换说明%10.2f。m是10,p是2,而X是f。在转换说明%10f中,m是10,p省略了;而在转换说明%.2f,m省去了。
最小字段宽度m指定了要显示的最少字符数量。如果要显示的数值的字符数少于m,那么值在字段内是右对齐的