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...