來源:CSDN - 戀貓大鯉魚
編譯環(huán)境:Linux 環(huán)境以 g 4.4.6 編譯成 64 位程序
1.printf() 簡介
printf() 是 C 語言標(biāo)準(zhǔn)庫函數(shù),用于將格式化后的字符串輸出到標(biāo)準(zhǔn)輸出。標(biāo)準(zhǔn)輸出,即標(biāo)準(zhǔn)輸出文件,對應(yīng)終端的屏幕。printf() 申明于頭文件 stdio.h。函數(shù)原型:int?printf?(?const?char?*?format,?...?);
返回值:正確返回輸出的字符總數(shù),錯誤返回負(fù)值。與此同時,輸入輸出流錯誤標(biāo)志將被置值,可由指示器函數(shù) ferror(FILE *stream) 來檢查輸入輸出流的錯誤標(biāo)志,如果 ferror() 返回一個非零值,表示出錯。調(diào)用格式:
printf("格式化字符串",?輸出表列)
格式化字符串包含三種對象,分別為:(1)字符串常量;
(2)格式控制字符串;
(3)轉(zhuǎn)義字符。字符串常量原樣輸出,在顯示中起提示作用。輸出表列中給出了各個輸出項(xiàng),要求格式控制字符串和各輸出項(xiàng)在數(shù)量和類型上應(yīng)該一一對應(yīng)。其中格式控制字符串是以 % 開頭的字符串,在 % 后面跟有各種格式控制符,以說明輸出數(shù)據(jù)的類型、寬度、精度等。
2.格式控制字符串詳解
printf() 的格式控制字符串組成如下:%[flags][width][.prec][length]type
分別為:%[標(biāo)志][最小寬度][.精度][類型長度]類型。
2.1 類型(type)
首先說明類型,因?yàn)轭愋褪歉袷娇刂谱址闹刂兄兀潜夭豢缮俚慕M成部分,其它的選項(xiàng)都是可選的。type 用于規(guī)定輸出數(shù)據(jù)的類型,含義如下:字符 | 對應(yīng)數(shù)據(jù)類型 | 含義 | 示例 |
---|---|---|---|
d/i | int | 輸出十進(jìn)制有符號 32bits 整數(shù),i 是老式寫法 | printf("%i",123); 輸出123 |
o | unsigned int | 無符號8進(jìn)制(octal)整數(shù)(不輸出前綴0) | printf("0%o",123); 輸出0173 |
u | unsigned int | 無符號10進(jìn)制整數(shù) | printf("%u",123); 輸出123 |
x/X | unsigned int | 無符號16進(jìn)制整數(shù),x對應(yīng)的是abcdef,X對應(yīng)的是ABCDEF(不輸出前綴0x) | printf("0x%x 0x%X",123,123); 輸出0x7b 0x7B |
f/lf | float(double) | 單精度浮點(diǎn)數(shù)用f,雙精度浮點(diǎn)數(shù)用lf(printf可混用,但scanf不能混用) | printf("%.9f %.9lf",0.000000123,0.000000123); 輸出0.000000123 0.000000123。注意指定精度,否則printf默認(rèn)精確到小數(shù)點(diǎn)后六位 |
F | float(double) | 與f格式相同,只不過 infinity 和 nan 輸出為大寫形式。 | 例如printf("%f %F %f %F\n",INFINITY,INFINITY,NAN,NAN); 輸出結(jié)果為inf INF nan NAN |
e/E | float(double) | 科學(xué)計(jì)數(shù)法,使用指數(shù)(Exponent)表示浮點(diǎn)數(shù),此處"e"的大小寫代表在輸出時“e”的大小寫 | printf("%e %E",0.000000123,0.000000123); 輸出1.230000e-07 1.230000E-07 |
g | float(double) | 根據(jù)數(shù)值的長度,選擇以最短的方式輸出,%f或%e | printf("%g %g",0.000000123,0.123); 輸出1.23e-07 0.123 |
G | float(double) | 根據(jù)數(shù)值的長度,選擇以最短的方式輸出,%f或%E | printf("%G %G",0.000000123,0.123); 輸出1.23E-07 0.123 |
c | char | 字符型??梢园演斎氲臄?shù)字按照ASCII碼相應(yīng)轉(zhuǎn)換為對應(yīng)的字符 | printf("%c\n",64) 輸出A |
s | char* | 字符串。輸出字符串中的字符直至字符串中的空字符(字符串以空字符’\0‘結(jié)尾) | printf("%s","測試test"); 輸出:測試test |
S | wchar_t* | 寬字符串。輸出字符串中的字符直至字符串中的空字符(寬字符串以兩個空字符’\0‘結(jié)尾) | setlocale(LC_ALL,"zh_CN.UTF-8"); |
wchar_t wtest[]=L"測試Test";
printf("%S\n",wtest);
輸出:測試test | | p | void* | 以16進(jìn)制形式輸出指針 |?
printf("0x%p","lvlv");
輸出:0x000000013FF73350 | | n | int* | 什么也不輸出。%n對應(yīng)的參數(shù)是一個指向signed int的指針,在此之前輸出的字符數(shù)將存儲到指針?biāo)傅奈恢?|?int num=0;
printf("lvlv%n",