需要注意printf输出字符串时,“/n”之前和之后的空格含义不同,前面的空格没有影响,即如下两条语句
printf ("Hardness=%d /n",2);printf ("Hardness=%d/n ",2);
的输出是对齐的。而下面两条语句
printf ("Hardness=%d/n ",2);printf ("Hardness=%d/n ",2);
的输出是不对齐的,输出为
Hardness=2 Hardness=2
即第2条语句前面的空格数由第1条语句“/n”后面的空格数决定。当要输出多行左对齐的信息时,要特别注意。例如原来是想输出左对齐,但语句
double a=5.8,b=9.6;printf ( "%f/n ",a);printf ( "%f/n",b);
的输出则为
5.800000 9.600000
这是因为在两个双引号之间的空格也是输出信息的组成部分,输出换行之后,信息并没有输出完毕,后面的空格被输出到下一行,造成第2个输出语句从空格之后开始。看看下面程序的运行结果,就会恍然大悟。
#include <stdio.h>void main(){ double a=5.8,b=9.6; printf ("a=%f/nb=%f/n",a,b); printf ("We are Here!/nWhere are you?/nBye!/n");}
输出结果如下。
a=5.800000b=9.600000We are Here!Where are you?Bye!
printf函数的一般格式为
printf(格式控制,输出量表);
格式控制是用双引号("")引起来的字符串,也称“控制字符串”。它包括普通字符串和格式说明。其中普通字符串是需要原样输出的字符,遇到“/n”则换到下一行。格式说明由“%”和格式符(d、f、c、s、o、x、u等)组成(如%d和%f等)。它的作用是将输出的数据转换为指定格式输出。格式说明总是由“%”字符开始,但必须符合要求。如下语句
int a=45;printf("%%d/n",a);
多了一个“%”号,输出的结果就是错的。
【例2.1】能给出如下语句的输出结果吗?
#include <stdio.h>void main(){ double a=5.8,b=9.6; int d=98; char s='w',st="OK"; printf ("a=%F/nb=%f/n",a,b); printf ("d=%D/nd=%d/n",d,d); printf ("s=%C/ns=%c/n",s,s); printf ("s=%S/ns=%s/n",st,st);}
不能!因为格式符没有规定大小写之分,所以必须区别对待。以VC(Visual C的简写)为例,对于十进制数值,只能是小写字符,所以%F和%D是无效的。对字符而言,大小写均可(%c与%C等效),但对字符串,则只能用%s,不能用%S。不同的编译系统可能也有区别。虽然从下面的输出结果中可以看出一些规律,但变量d的地址与机器的硬件有关。
a=,b=5.800000d=D,d=21d=15,d=15d=O,d=25s=w,s=wst=,st=OKp=U,p=1245036
它们对小写总是有效的,所以不要去记它们,统一使用小写字母即可。另外,对格式符进行修饰的long,则既可以使用小写字母l,也可以使用大写字母L。
最容易混淆的还是%c和%s。程序语句
char c1='W',c2='e',st="We";printf ("%c%c,%s/n",c1,c2,st);
的输出是“We,We”。不要混用格式符,下面的语句
double a=3.5;printf("%d/n",a);
的输出结果是错的(输出0),原因是错用了格式符%d(应该使用%f)。