c中格式字串的一般形式為: %[標誌][輸出最小寬度][.精度][長度]型別, 其中方括號中的項為可選。
(1)型別型別字元用以表示輸出資料的型別,其格式符和意義下表所示:
表示輸出型別的格式字元
格式字元意義
a浮點數、十六進製制數字和p-計數法(c99)
a浮點數、十六進製制數字和p-計數法(c99)
c輸出單個字元
d以十進位制形式輸出帶符號整數(正數不輸出符號)
e(e)
以指數形式輸出單、雙精度實數
f以小數形式輸出單、雙精度實數
g(g)
以%f%e中較短的輸出寬度輸出單、雙精度實數,%e格式在指數小於-4或者大 於等於精度時使用
i有符號十進位制整數(與%d相同)
o以八進位制形式輸出無符號整數(不輸出字首o)p指標
s輸出字串
x(x)
以十六進製制形式輸出無符號整數(不輸出字首ox)
u以十進位制形式輸出無符號整數
(2)標誌
標誌字元為-、+、#、空格和0五種,其意義下表所示:
標誌格式字元
標 志 意 義
-結果左對齊,右邊填空格
+輸出符號(正號或負號)
空格輸出值為正時冠以空格,為負時冠以負號
#對c,s,d,u類無影響;對o類,在輸出時加字首0;對x類, 在輸出時加字首0x或者0x;對g,g 類防止尾隨0被刪除;對於所有的浮點形式,#保證了即使不跟任何數字,也列印乙個小數點字元
0對於所有的數字格式,用前導0填充字段寬度,若出現-標誌或者指定了精度(對於整數),忽略
(3)輸出最小寬度
用十進位制整數來表示輸出的最少位數。若實際位數多於定義的寬度,則按實際位數輸出,若實際位數少於定義的寬度則補以空格或0。
/* 以十進位制形式輸出帶符號整數(正數不輸出符號) */
printf("*%-10d*\n", 223); //*223 *
printf("*%+10d*\n" , -232); //* -232*
printf("*%2d*\n" , 223); //*223*
printf("*%#d*\n" , -232); //*-232*
/* 以八進位制形式輸出無符號整數(不輸出字首o) */
printf("*%-10o*\n" , 223); //*337 *
printf("*%+10o*\n" , -232); //*37777777430*
printf("*%o*\n" , 223); //*337*
printf("*%#o*\n" , -232); //*037777777430*
printf("\n");
/* 以十六進製制形式輸出無符號整數(不輸出字首ox) */
printf("$%-10x$\n" , 223); //$df $
printf("$%010x$\n" , -232); //$00ffffff18$
printf("$% x$\n" , 223); //$df$
printf("$%#x$\n" , -232); //$0xffffff18$
printf("\n");
/* 以十進位制形式輸出無符號整數 */
printf("%-10u\n" , 223); //223
printf("%+10u\n" , -232); //4294967064
printf("% u\n" , 223); //223
printf("%#u\n" , -232); //4294967064
printf("\n");
/* 以小數形式輸出單、雙精度實數 */
printf("%-10f\n" , 223.11);
printf("%+10f\n" , 232.11111111); //+232.111111
printf("% f\n" , -223.11);
printf("%#f\n" , -232.11111111);
printf("\n");
/* 以指數形式輸出單、雙精度實數 */
printf("%-10e\n" , 223.11);
printf("%+10e\n" , 232.11111111); //+2.321111e+02
printf("% e\n" , -223.11);
printf("%#e\n" , -232.11111111);
printf("\n");
/* 以%f%e中較短的輸出寬度輸出單、雙精度實數 */
printf("%-10g\n" , 223.11);
printf("%+10g\n" , 232.111111111111); // +232.111
printf("% g\n" , -223.11);
printf("%#g\n" , -232.111111111111);
printf("\n");
/* 輸出單個字元 */
printf("%-10c\n" , 'a'); //a
printf("%+10c\n" , 97); // a
printf("% c\n" , 'a'); //a
printf("%#c\n" , 97); //a
printf("\n");
/* 輸出單個字元 */
printf("%-20s\n" , "this is a test!"); //this is a test!
printf("%+20s\n" , "2342o34uo23u"); // 2342o34uo23u
printf("% 20s\n" , "this is a test!"); // this is a test!
printf("%#s\n" , "2342o34uo23u"); //2342o34uo23u
(4)精度
精度格式符以「.」開頭,後跟十進位制整數。本項的意義是:如果輸出數字,則表示小數的位數;如果輸出的是字元,則表示輸出字元的個數;若實際位數大於所定義的精度數,則截去超過的部分。
printf("%.3d\n" , 5555); //5555
printf("%.3f\n" , 0.88888);
printf("%.3f\n" , 0.9999);
printf("%.4s\n" , "this is a test!"); //this
(5)長度
長度格式符為h,l兩種,h表示按短整型量輸出,l表示按長整型量輸出。
使用例項
h和整數轉換說明符一起使用,表示乙個short int 或者unsigned short int型別的數值
%hu,%hx,%6.4hd
hh和整數轉換說明符一起使用,表示乙個short int 或者unsigned short型別的數值
%hhu,%hhx,%6.4hhd
j和整數轉換說明符一起使用,表示乙個intmax_t或者uintmax_t型別的數值
%jd,%8jx
l和整數轉換說明符一起使用,表示乙個long int 或者unsigned long int型別的數值
%ld,%8lu
ll和整數轉換說明符一起使用,表示乙個long int 或者unsigned long int型別的數值 (c99)
%lld,%8llu
l和浮點轉換說明符一起使用,表示乙個long double的值
%lf,%10.4le
t和整數轉換說明符一起使用,表示乙個ptrdiff_t值(兩個指標之間的差相對應的型別)(c99)
%td,%12ti
z和整數轉換說明符一起使用,表示乙個size_t值(sizeof返回的型別)(c99)
%zd,%12zx
int a=15;
float b=138.3576278;
double c=35648256.3645687;
char d='p';
printf("a=%d,%5d,%o,%x\n",a,a,a,a); //a=15, 15,17,f
printf("b=%f,%lf,%5.4lf,%e\n",b,b,b,b); //b=138.357620,138.357620,138.3576,1.383576e+02
printf("c=%lf,%f,%8.4lf\n",c,c,c); //c=35648256.364569,35648256.364569,35648256.3646
printf("d=%c,%8c\n",d,d); //d=p, p
printf輸出格式
轉換說明及作為結果的列印輸出 a 浮點數 十六進製制數字和p 記數法 a 浮點數 十六進製制數字和p 記法 c 乙個字元 d 有符號十進位制整數 e 浮點數 e 記數法 e 浮點數 記數法 f 浮點數 十進位制記數法 g 根據數值不同自動選擇 f或 e g 根據數值不同自動選擇 f或 e.i 有符號...
printf輸出格式
printf 格式化字串 格式化整型數值 格式化浮點值 printf 格式轉換的一般形式如下 flags width prec type 以中括號括起來的引數為選擇性引數,而 與type則是必要的。底下先介紹type的幾種形式 整數 d 整數的引數會被轉成一有符號的十進位制數字 u 整數的引數會被轉...
printf 輸出格式
printf函式稱為格式輸出函式,其關鍵字最末乙個字母f即為 格式 format 之意。其功能是按使用者指定的格式,把指定的資料顯示到顯示器螢幕上。printf函式呼叫的一般形式 printf函式是乙個標準庫函式,它的函式原型在標頭檔案 stdio.h 中。但作為乙個特例,不要求在使用 printf...