格式轉換說明符printf() / scanf()
本文轉自:http://www.cnblogs.com/ilegend/articles/2258701.html
表一 轉換說明符及作爲結果的打印輸出
轉換說明 |
輸 出 |
%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 的無符號十六進制整數 |
%X |
使用十六進制數字0F的無符號十六進制整數 |
%% |
打印一個百分號 |
表二 printf() 修飾符
修飾符 |
意 義 |
標誌 |
五種標誌 (-、+、空格、# 和0) 都將在表三中描述,可以使用零個或多個標誌 |
digit(s) |
字段寬度的最小值。如果該字段不能容納要打印的數或者字符串,系統會使用更寬的字段。示例:“%4d” |
.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” |
表四 ANSIC 中 scanf()的轉換說明符
轉換說明符 |
意 義 |
%c |
把輸入解釋成一個字符 |
%d |
把輸入解釋成一個有符號十進制整數 |
%e,%f,%g, %a |
把輸入解釋成一個浮點數 (%a是C99標準) |
%E,%F,%G,%A |
把輸入解釋成一個浮點數 (%A是C99標準) |
%i |
把輸入解釋成一個有符號十進制整數 |
%o |
把輸入解釋成一個有符號八進制數 |
%p |
把輸入解釋成一個指針(地址) |
%s |
把輸入解釋成一個字符串;輸入的內容以一個非空白字符作爲開始,並且包含知道下一個空白字符的全部字符 |
%u |
把輸入解釋成一個無符號十進制整數 |
%x,%X |
把輸入解釋成一個有符號十六進制整數 |
表五 scanf()的轉換修飾符
修飾符 |
意 義 |
* |
滯後賦值。示例:“%*d” |
digit(s) |
最大字段寬度;在達到最大字段寬度或者遇到第一個空白字符時(不管哪一個先發生都一樣)停止對輸入項的讀取。示例:“%10s” |
hh |
把整數讀作signed char 或 unsigned char 。示例:“%hhd”“%hhu” |
ll |
把整數讀作long long或者 unsigned long long (C99)。示例:“%lld”“%llu” |
h,l或L |
“%hd”和“hi”指示該值將會存儲在一個short int中。 “%ho”“%hx”和“%hu”指示該值將會存儲在一個unsigned short int中。 “%ld”和“%li”指示該值將會存儲在一個long中。 “%lo”“%lx”和“%lu”指示該值將會存儲在一個unsigned long中。 “%le”“%lf”和“%lg”指示該值以double類型存儲。將L(而非l)與e、f和g一起使用指示該值以long double類型存儲。 如果沒有這些修飾符,d、i、o和x指示int類型,而e、f和g指示float類型。 |