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