格式化輸出函數printf( )
printf( )功能:
向系統指定輸出設備按指定的格式輸入任意個任意類型的數據,並返回實際輸出的字符數。若出錯,將返回負數。
printf( )使用形式:
printf("格式控制字符串",輸出項列表);
格式字符(以"%"引導):
(1)d格式字符:用來輸出十進制整數。
- %d,按整型數據的實際長度輸出。
- %md,m為指定的輸出字段的寬度。若實際位數小於m,則左端補空格;若實際位數大於m,則按實際位數輸出。
- %ld,輸出長整型數據。
(2)o格式字符("%#o"):以八進制形式輸出整數。
(3)x格式字符("%#x"):以十六進制形式輸出整數。
(4)u格式字符:用來輸出unsigned型數據,即無符號數,以十進制輸出。
(5)c格式字符:用來輸出一個字符。
(6)s格式字符:用來輸出一個字符串。
(7)f格式字符:用來輸出實數(包括單雙精度),以小數形式輸出。
- %f,整數部分全輸出並輸出6位小數。
(8)e格式字符:以指數形式輸出實數。
(9)g格式字符:用來輸出實數,它根據數值的大小,自動選擇f格式或e格式(選擇輸出時占寬度較小的一種),且不輸出無意義的零。
格式字符串:
%[flag][width][.prec][F|N|h|L]Type
(1)標志flag:
- "+":對於正數符號位輸出為正號"+",對於負數輸出"-"。
- 空格(" "):對於正數符號位輸出空格,對於負數輸出"-"。
- "-":輸出時左對齊,右側補空格。
- "#":加在代表輸出八進制的類型字符"o"前表示八進制。
(2)輸出寬度width:用十進制整數來表示輸出的最少位數。若實際數據的位數多於指定寬度,則按實際位數輸出;若少於指定寬度,則補以空格或"0";
(3)精度prec:精度格式符以"."開頭,后跟一個十進制整數。
意義:如果輸出數字,則表示數字的小數位數;如果輸出的時字符,則表示輸出字符的個數;若實際位數大於所定義的精度,則超出部分被截去。
(4)長度:F|n|h|l 表示指針是否是遠指針,或整數是否是長整數。
- F:表示遠指針。
- n:表示近指針。
- h:短整型或單精度浮點數。
- l:長整型或雙精度浮點數。
(5)類型Type:
類型指示符:
格式字符 | 說明 |
---|---|
d,i | 以帶符號的十進制形式輸出整數 |
o | 以八進制形式輸出整數 |
u | 以無符號的十進制形式輸出整數 |
x或X | 以十六進制形式輸出整數 |
c | 輸出單個字符 |
s | 輸出字符串 |
f | 以小數形式輸出實數 |
e或E | 以指數形式輸出實數 |
g或G | 自動選擇"%f"和"%e"中寬度最小的形式輸出實數 |
(6)具體的格式字符串示例:
- %m.nf:輸出的實數共占m個字符,其中小數有n個。若實際數值位數不足m個,左端補空格;若實際數值位數超出規定的寬度,則整數部分按實際輸出,小數部分四舍五入為n位。
- %e:標准寬度占13位,其中,尾數部分為:整數部分占1位,小數點占1位,小數占6位,e占1位;指數部分為:正負號占1位,指數占3位。
- %m.ne:整個數寬度至少占m位,n為尾數部分的小數部分,不足的在左端補空格,多出的按實際位數輸出。
- %ms:輸出一個字符串,寬度占m位。若長度小於m,則右對齊,左側補空格;若長度大於m,則原樣輸出,不進行截取。
- %-ms:與%ms類似,但長度小於m時,字符串左對齊,右側補空格。
- %m.ns:整個輸出項占m列,但只取字符串中左側n個字符輸出。輸出時右對齊,左端補空格。當m<n時,所占寬度m忽略不計,輸出字符串的前n個字符。
- %-m.ns:含義與%m.ns相似,將n個字符輸出在m列范圍內,左對齊,右側補空格。
(7)注意點:
- 任意一個整型數據也可以以字符形式輸出,輸出時,如果整形數據超過255的,先對256做取余操作后再輸出。
- ”格式字符串“中的格式類型指示符的類型及個數,必須與”輸出項列表“中的輸出項的數據類型、個數一致,否則會引起輸出錯誤。
- 如果格式類型指示符的個數小於輸出項的個數,多余的輸出項不予輸出;如果格式說明的個數多於輸出項的個數,多余的格式項輸出不定值或"0"。
單個字符的輸出函數putchar( )
putchar( )功能:
向標准輸出設備(顯示器)輸出一個字符,並返回輸出字符的ASCII值。
putchar( )使用形式:
putchar(ch);
其中"ch"可以是整型或字符型的常量、變量或表達式,也可以是一個轉義字符。輸出時,先計算括號內的值,然后根據ASCII碼輸出相應的字符。
putchar( )函數只能用於單個字符的輸出,且一次只能輸出一個字符。
常用字母對應的ASCII碼值:
A~Z 65~90
a~z 97~122
實例效果:
printf("%d\n",234);
printf("%3d\n",23144);
printf("%3d\n",21);
printf("%#o\n",23);
printf("%#x\n",17);
printf("%c\n",68);
char a[10] = "abcdef";
printf("%s\n",a);
printf("%f\n",10.1);
printf("%g\n",23.2424);
printf("%5.2f\n",0.123);
printf("%5.2f\n",0.1234567);
printf("%e\n",1331.1341123);
printf("%8.3e\n",1331.1341123);
printf("%8.3e\n",1331.2);
printf("%3s\n",a);
printf("%9s\n",a);
printf("%-9s\n",a);
printf("%4.2s\n",a);
printf("%2.5s\n",a);
printf("%-4.2s\n",a);
printf("%-2.5s\n",a);
輸出結果: