1. 程式人生 > >詳解C語言printf函式以及%佔位符知識

詳解C語言printf函式以及%佔位符知識

功能:

C語言中產生格式化輸出的函式(定義在stdio.h系統標頭檔案中),向終端輸出 (顯示屏等。。。);

定義:

int printf(const char *format,[argument]);   //返回值是int型別。

%佔位符

format 引數輸出的格式,定義格式為:%[flags][width][.perc][F|N|h|l]type

1.type: 規定輸出的資料型別 d 有符號10進位制整數i 有符號10進位制整數o 無符號8進位制整數u 無符號10進位制整數x 無符號的16進位制數字,並以小寫abcdef表示X 無符號的16進位制數字,並以大寫ABCDEF表示f 浮點數
E/e 用科學表示格式的浮點數g 使用%f和%e表示中的總的位數表示最短的來表示浮點數 G 同g格式,但表示為指數c 單個字元s 字串S wchar_t字元寬字元)型別字串% 顯示百分號本身p 顯示一個指標,near指標表示為:XXXXfar 指標表示為:XXXX:YYYYn 相連參量應是一個指標,其中存放已寫字元的個數

2.flags:規定輸出格式,取值和含義如下:

無 右對齊,左邊填充0和空格- 左對齊,右邊填充空格+ 在數字前增加符號 + 或 -0 將輸出的前面補上0,直到佔滿指定列寬為止(不可以搭配使用-)空格 輸出值為正時冠以空格,為負時冠以負號# 當type=c,s,d,i,u時沒有影響

type=o,x,X時,分別在數值前增加'0',"0x","0X"type=e,E,f時,總是使用小數點type=g,G時,除了數值為0外總是顯示小數點

flags:這個根據自己理解,也可以這樣簡單的描述,比如:printf("%-2d", 3); 這條語句, % d 之間, -N N表示輸出的數字的寬度,如果不夠就用空格補齊右邊 3.width  : 用於控制顯示數值的寬度,取值和含義如下 n(n=1,2,3...) 寬度至少為n位,不夠以空格填充0n(n=1,2,3...) 寬度至少為n位,不夠左邊以0填充* 格式列表中,下一個引數還是width 4.prec 用於控制小數點後面的位數,取值和含義如下:

無 按預設精度顯示0 當type=d,i,o,u,x時,沒有影響type=e,E,f時,不顯示小數點n(n=1,2,3...) 當type=e,E,f時表示的最大小數位數type=其他,表示顯示的最大寬度.* 格式列表中,下一個引數還是width 5.F|N|h|l 表示指標是否是遠指標或整數是否是長整數遠指標n 近指標h 短整數或單精度浮點數l 長整數或雙精度浮點數前面扯了這麼多有幾個主要注意點:

double a = 1.5333;

printf("%-06.3lf", a);

這樣寫會有警告,螢幕列印:1.533[] ([]表示空格)簡單分析下,%lf表示double型別,小數點後面是三位,-0,表示輸出格式左對齊,然後0補齊右邊,假如補齊了就是 1.5330,不是跟後面.3(小數點後面保留三位矛盾了?),所以我把它改成-06.4試試,還是有警告,結果輸出1.5333,改成-07.4,輸出 1.5333[], 小數點也會在一個數據位(姑且叫這玩意兒).

% d 之間, ONN表示輸出的數字的寬度,如果不夠就用0補齊左邊(重點) 比如設定UIImageView的animationImages屬性的時候,圖片名字依次是 00 01 02 03 04 05.。。。。那麼就用%02d(這個是UIKit裡面的東西,C只做瞭解).

% d 之間, N N表示輸出的數字的寬度,如果不夠就用空格補齊左邊

% d 之間, -N N表示輸出的數字的寬度,如果不夠就用空格補齊右邊

% f 之間,可以有M.N M 表示輸出數字所佔的寬度,N表示小數點後面的位數,如果不夠會用空格補齊左邊

總結:

1.不管怎麼輸出,不能改變原有的值,比如printf("%-03d", 5); ,這樣會警告,-0,表示左縮排,然後0補齊右邊。3表示位寬,也就是輸出 500,(這樣肯定不行) 2.- 和 0 不要同時用,-0表示表示左對齊,0補齊右邊,對於int型別,改變了數值,對於double或者float 畫蛇添足。3.對於float和double,M.N 中 優先滿足 小數點後面的位數:N 。4.其實這些東西,不一定要盤根問到底,掌握幾個常用的運用到開發中即可。