詳解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.其實這些東西,不一定要盤根問到底,掌握幾個常用的運用到開發中即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章