printf 輸出格式
C中格式字符串的一般形式為: %[標志][輸出最小寬度][.精度][長度]類型,其中方括號[]中的項為可選項。各項的意義介紹如下:
1.類型類型字符用以表示輸出數據的類型,其格式符和意義下表所示:
表示輸出類型的格式字符 格式字符意義
a 浮點數、十六進制數字和p-計數法(C99)
A 浮點數、十六進制數字和p-計數法(C99)
c 輸出單個字符
d 以十進制形式輸出帶符號整數(正數不輸出符號)
e 以指數形式輸出單、雙精度實數
E 以指數形式輸出單、雙精度實數
f 以小數形式輸出單、雙精度實數
g 以%f%e中較短的輸出寬度輸出單、雙精度實數,%e格式在指數小於-4或者大 於等於精度時使用
G 以%f%e中較短的輸出寬度輸出單、雙精度實數,%e格式在指數小於-4或者大於等於精度時使用
i 有符號十進制整數(與%d相同)
o 以八進制形式輸出無符號整數(不輸出前綴O)
p 指針
s 輸出字符串
x 以十六進制形式輸出無符號整數(不輸出前綴OX)
X 以十六進制形式輸出無符號整數(不輸出前綴OX)
u 以十進制形式輸出無符號整數
2.標志
標志字符為-、+、#、空格和0五種,其意義下表所示:
標志格式字符 標 志 意 義
- 結果左對齊,右邊填空格
+ 輸出符號(正號或負號)
空格 輸出值為正時冠以空格,為負時冠以負號
# 對c,s,d,u類無影響;對o類,在輸出時加前綴0;對x類,
在輸出時加前綴0x或者0X;對g,G 類防止尾隨0被刪除;
對於所有的浮點形式,#保證了即使不跟任何數字,也打印一個小數點字符
0 對於所有的數字格式,用前導0填充字段寬度,若出現-標志或者指定了精度(對於整數),忽略
3.輸出最小寬度
用十進制整數來表示輸出的最少位數。若實際位數多於定義的寬度,則按實際位數輸出,若實際位數少於定義的寬度則補以空格或0。
如:
printf("%-10e\n" , 223.11);
printf("%+10e\n" , 232.11111111);
4.精度
精度格式符以“.”開頭,後跟十進制整數。本項的意義是:如果輸出數字,則表示小數的位數;如果輸出的是字符,則表示輸出字符的個數;若實際位數大於所定義的精度數,則截去超過的部分。
5.長度
長度格式符為h,l兩種,h表示按短整型量輸出,l表示按長整型量輸出。
6.特殊用法
對於m.n的格式還可以用如下方法表示(例)
char ch[20];
printf("%*.*s\n",m,n,ch);
前邊的*定義的是總的寬度,後邊的定義的是輸出的個數。分別對應外面的參數m和n 。
還有一種特殊的輸出格式 %n 可以將所輸出字符串的長度值賦绐一個變量, 見下例:
int slen;
printf("111%n", &slen);
執行後變量被賦值為3。