格式轉換說明符scanf,printf

2021-07-27 04:39:27 字數 3237 閱讀 3566

printf、sprintf、scanf、sscanf等格式化函式在使用是需要特別小心,另外如果使用scanf_s這樣的安全函式,更應當小心,因為如果格式控制有問題,可能直接導致格式化失敗或執行時錯誤。

表一:轉換說明符及作為結果的列印輸出

轉換說明

輸出%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型別。

表附一:特別說明符

轉換說明符

意義%i64

配合u,d等,可以輸入輸出64位整數.msvc平台有效.如%i64u , %i64d. 注意大寫

小結:乙個位元組的用%c,%hhu,%hhd等,兩個位元組用%hu,%hd等,四個位元組用%d,%u等8個位元組的用%lld,%llu等. 盡量不要用%i64d這樣不相容的格式.

C語言格式轉換說明符

各項的意義介紹如下 1 型別 型別字元用以表示輸出資料的型別,其格式符和意義如下表所示 格式字元 意 義 d 以十進位制形式輸出帶符號整數 正數不輸出符號 o 以八進位制形式輸出無符號整數 不輸出字首0 x,x 以十六進製制形式輸出無符號整數 不輸出字首ox u 以十進位制形式輸出無符號整數 f 以...

轉換說明符

a a 浮點數 十六進製制數字和p p 記數法 c99 c 字元 d 有符號十進位制整數 f 浮點數 包括float和doulbe e e 浮點數指數輸出 e e 記數法 g g 浮點數不顯無意義的零 0 i 有符號十進位制整數 與 d相同 u 無符號十進位制整數 o 八進位制整數 e.g.0123...

DebugPrint 格式說明符

1 直接列印字串。dbgprint hello world 2 空結尾的字串,你可以用普通得c 語法表示字串常量 char variable string hello world dbgprint s variable string 3 空結尾的寬字串 wchar 型別 wchar string w...