首页 » C语言解惑 » C语言解惑全文在线阅读

《C语言解惑》2.1 printf输出的小奥妙

关灯直达底部

需要注意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)。