需要注意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.800000 b=9.600000 We 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.800000 d=D ,d=21 d=15 ,d=15 d=O ,d=25 s=w ,s=w st= ,st=OK p=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)。