本节书摘来自华章出版社《C语言解惑》一 书中的第2章,第2.1节,作者:刘振安 刘燕君,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
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.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)。