C語言printf函數詳解
一、相關基礎知識
請求printf()打印變量的指令取決於變量的類型,例如打印整數用%d符號,打印字符用%c符號,這些符號稱為轉換說明(conversion specification),因為它們指定了如何把數據轉換成可顯示的形式
二、具體內容
printf的使用格式:
printf(Control-string,item1,item2,。。。);
控制字符串(control-string):是一個描述項目如何打印的字符串,所以需要使用雙引號“”,以及應該為每個要打印的項目包含一個轉換說明符,且必須一一對應,不可多一少一,就算在最好情況下也只能得到無意義的值!
項目:item1,item2等等都是要打印的項目,可以是變量、常量,甚至可以是需要計算的表達式
下列列出的是ANSI C標准printf()提供的各種轉換說明
轉換說明 |
輸出 |
%a |
浮點數、十六進制數字和p-記數法(C99) |
%A |
浮點數、十六進制數字和P-記法(C99) |
%c |
一個字符 |
%d |
有符號十進制整數 |
%e |
浮點數、e-記數法 |
%E |
浮點數、E-記數法 |
%f |
浮點數、十進制記數法 |
%g |
根據數值不同自動選擇%f或%e,%e格式在指數小於-4或者大於等於精度時使用 |
%G |
根據數值不同自動選擇%f或%E,%E格式在指數小於-4或者大於等於精度時使用 |
%i |
有符號十進制數(與%d相同) |
%o |
無符號八進制整數 |
%p |
指針 |
%s |
字符串 |
%u |
無符號十進制整數 |
%x |
使用十六進制數字0f的無符號十六進制整數(0f中是數字0,而不是字母o) |
%X |
使用十六進制數字0F的無符號十六進制整數 |
%% |
打印一個百分號 |
可以在%和定義轉換字符之間通過插入修飾符對基本的轉換說明加以修改,如果使用了一個以上的修飾符,那么它們應該與上表中出現的順序相同,也並不是所有的組合都是可能的
下列列出的是printf()修飾符
修飾符 |
意義 |
標志 |
五種標志 (-、+、空格、# 和0) 都將在后表中描述,可以使用零個或多個標志 例如:”%-10d” |
digit(s)
|
字段寬度的最小值。如果該字段不能容納要打印的數或者字符串,系統會使用更寬的字段。示例:“%4d”,字段寬度包括符號,即12.23占5位! 即A.B形式中的A,下面的精度為A.B形式中的B,當位數不足會在前面自動補空格,超過正常顯示 |
.digit(s)
|
精度。對於%e、%E和%f轉換,是將要在小數點的右邊打印的數字的位數。對於%g和%G轉換,是有效數字的最大位數。對於%s轉換,是將要打印的字符的最大數目。對於整數轉換,是將要打印的數字的最小位數;如果必要,要使用前導零來達到這個位數。只使用“.”表示其后跟隨一個零,所以%.f與%.0f相同。示例:“%5.2f”打印一個浮點數,他的字段寬度為5個字符,小數點后有兩個數字。 |
h |
和整數轉換說明符一起使用,表示一個short int 或者 unsigned short int 類型數值。 示例:“%hu”、“%hx”和“%6.4hd” |
hh
|
和整數轉換說明符一起使用,表示一個signed char 或者unsigned char類型數值。 示例:“%hhu”、“%hhx”和“%6.4hhd” |
j
|
和整數轉換說明符一起使用,表示一個intmax_t或uintmax_t值。 示例:“%jd”和“%8jX” |
l(字母)
|
和整數說明符一起使用,表示一個long int 或者unsigned long int 類型值。 示例:“%ld”和“%8lu” |
ll(字母)
|
和整數說明符一起使用,表示一個long long int或 unsigned long long int 類型值 (C99)。 示例:“%lld”和“%8llu” |
L
|
和浮點轉換說明符一起使用,表示一個long double值。 示例:“%Lf”和“%10.4Le” |
t
|
和整數轉換說明符一起使用,表示一個ptrdiff_t值(與兩個指針之間的差相對應的類型) (C99) 示例:“%td”和“%12ti” |
z
|
和整數轉換說明符一起使用,表示一個size_t值(sizeof返回的類型) (C99)。 示例:“%zd”和“%12zx” |
下列列出的是printf()的標志
標志 |
意義 |
- |
項目是左對齊的:也就是說,會把項目打印在字段的左側開始處 例如:”%-20s” |
+ |
有符號的值若為正,則顯示帶加號的符號:若為負,則帶減號的符號 例如:”%+6.2f” |
(空格) |
有符號的值若為正,則顯示帶前導空格(但是不顯示符號):若為負,則帶減號符號。+標示會覆蓋空格標志 例如:”% 6.2f” |
# |
使用轉換說明的可選形式。若為%o格式,則以0開始;若為%x和%X格式,則以0x或0X開始,對於所有的浮點形式,#保證了即使不限任何數字,也打印一個小數點字符。對於%g和%G格式,它防止尾隨零被刪除。 例如:“%#o”、“%#8.0f”和“%+#10.3E” |
0 |
對於所有的數字格式,用前導零而不是用空格填充字段寬度。如果出現-標志或者指定了精度(對於整數)則忽略該標志。 例如:“%010d”和“%08.3f” |
printf函數也有一個返回值,它返回所打印的字符的數目,如果輸出錯誤,那么printf()會返回一個負數,使用返回值得一個可能原因是要檢查輸出錯誤,比如在讀入文件輸出的時候進行判斷
三、分析總結
當打印較多內容時可以采用下列兩種方法:
一、使用反斜杠符號 \ ,在上一行的末尾加上,下一行即可繼續,注意下一行必須刪除前面的空格,否則也會輸出前面的空格
例如:
printf("asdasdad\
sadasdadad\n"); //輸出連續的字符串
printf("asdasdad\
sadasdadad\n"); //輸出帶空格的字符串,asdasda adadasdas
二、可直接使用多個雙引號拼接,可不用刪除前面的空格,建議使用
例如:
printf("sadasda"
"dasdada"
"dasdada"
"dasdada"); //輸出連續的asdadadadasdadadasdadadada
四、實例測試