Format 指定輸出格式,后面跟要輸出的變量
目前 printf 支持以下格式:
%c 單個字符
%d 十進制整數(shù)
%f 十進制浮點數(shù)
%o 八進制數(shù)
%s 字符串
%u 無符號十進制數(shù)
%x 十六進制數(shù)
%% 輸出百分號%
一個格式說明可以帶有幾個修飾符,用來指定顯示寬度,小數(shù)尾數(shù)及左對齊等:
- 左對齊
+ 在一個帶符號數(shù)前加'+'或'-'號
0 域?qū)捰们皩?dǎo)零來填充,而不是用空白符
域?qū)捠且粋€整數(shù),設(shè)置了打印一個格式化字符串的最小域。精度使用小數(shù)點后加數(shù)字表示的,給出每個轉(zhuǎn)換說明符所要輸出的字符個數(shù)。
注意:帶修飾符的顯示可能不正常。
數(shù)據(jù)格式說明由“%”開頭,形式為 %<數(shù)據(jù)輸出寬度說明><格式符>,數(shù)據(jù)格式說明用在需要輸出變量或運算數(shù)值結(jié)果的時候,它的個數(shù)與輸出表列的個數(shù)一一對應(yīng)。
數(shù)據(jù)寬度說明中如果實際數(shù)據(jù)小于寬度,則根據(jù)寬度是否大于零而左補空格或右補空格。如果實際數(shù)據(jù)大于寬度,按實際位數(shù)輸出。如果缺省寬度說明,則按實際寬度輸出。
CString.format('%10f', a);
10表示把a以10個字符寬度格式化
%f形式輸出,則小數(shù)部分為6位;
例
%10f 若a的整數(shù)部分位數(shù)+小數(shù)點(1位)+小數(shù)部分位數(shù)大于等于10,則按實際a的形式格式化;
若a的整數(shù)部分位數(shù)+小數(shù)點(1位)+小數(shù)部分位數(shù)小于10,則在前面補空格,補足10位;
例
%.7f 則
a的小數(shù)部分位數(shù)若大于7,則截取7位小數(shù),整數(shù)部分不變;
a的小數(shù)部分位數(shù)若小于等于7,則不滿7位的部分后面以0補足;
str.Format(_T('Left-justified integer: %.6d\n'), b);
%.6d
若整數(shù)b不滿6位則在最高為前面補0;
若整數(shù)b大于等于6位則形式不變;
%6d
若整數(shù)b不滿6位,則在最高位前面補上空格,是之格式化為6個字符寬度;
若整數(shù)b大于等于6位則形式不變。
附:printf
int printf(const char *format,[argument]);
format 參數(shù)輸出的格式,定義格式為:
%[flags][width][.perc] [F|N|h|l]type
規(guī)定數(shù)據(jù)輸出方式,具體如下:
1.type 含義如下:
d 有符號10進制整數(shù)
i 有符號10進制整數(shù)
o 有符號8進制整數(shù)
u 無符號10進制整數(shù)
X/x 有符號16進制整數(shù)
F/f 浮點數(shù)
E/e 用科學(xué)表示格式的浮點數(shù)
g 使用%f和%e表示中的較精確者來表示浮點數(shù) G 同g格式,但表示為指數(shù)
c 單個字符
s 字符串
% 顯示百分號本身
p 顯示一個指針,near指針表示為:XXXX
far 指針表示為:XXXX:YYYY
n 相連參量應(yīng)是一個指針,其中存放已寫字符的個數(shù)
2.flags 規(guī)定輸出格式,取值和含義如下:
無 右對齊,左邊填充0和空格
+ 左對齊,右邊填充空格
- 在數(shù)字前增加符號 + 或 -
一個空格 只對負(fù)數(shù)顯示符號
# 當(dāng)type=c,s,d,i,u時沒有影響
type=o,x,X時,在數(shù)值前增加'0'字符
type=e,E,f時,總是使用小數(shù)點
type=g,G時,除了數(shù)值為0外總是顯示小數(shù)點 3.width 用于控制顯示數(shù)值的寬度,取值和含義如下n(n=1,2,3...) 寬度至少為n位,不夠以空格填充
0n(n=1,2,3...) 寬度至少為n位,不夠左邊以0填充 * 格
式列表中,下一個參數(shù)還是width 4.prec 用于控制小數(shù)點后面的位數(shù),取值和含義如下:
無 按缺省精度顯示
0 當(dāng)type=d,i,o,u,x時,沒有影響
type=e,E,f時,不顯示小數(shù)點
n(n=1,2,3...) 當(dāng)type=e,E,f時表示的最大小數(shù)位數(shù)
type=其他,表示顯示的最大寬度 .*
格式列表中,下一個參數(shù)還是width
5.F|N|h|l 表示指針是否是遠指針或整數(shù)是否是長整數(shù)
F 遠指針
n 近指針
h短整數(shù)或單精度浮點數(shù)
l 長整數(shù)或雙精度浮點數(shù)
1.一般格式
printf(格式控制,輸出表列)
例如:printf("i=%d,ch=%c\n",i,ch);
說明:
(1)“格式控制”是用雙撇號括起來的字符串,也稱“轉(zhuǎn)換控制字符串”,它包括兩種信息:
?、俑袷秸f明:由“%”和格式字符組成,它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出。
?、谄胀ㄗ址?,即需要原樣輸出的字符。
?。?)“輸出表列”是需要輸出的一些數(shù)據(jù),可以是表達式
(3)printf函數(shù)的一般形式可以表示為
printf(參數(shù)1,參數(shù)2,……,參數(shù)n)
功能是將參數(shù)2~參數(shù)n按參數(shù)1給定的格式輸出
2.格式字符(9種)
?。?)d(或i)格式符。用來輸出十進制整數(shù),有以下幾種用法:
?、?d,按整型數(shù)據(jù)的實際長度輸出。
?、?md,m為指定的輸出字段的寬度。如果數(shù)據(jù)的位數(shù)小于m,則左端補以空格,若大于m,則按實際位數(shù)輸出。
?、?ld(%mld 也可),輸出長整型數(shù)據(jù)。
例如:long a=123456;
printf("%ld",a);
?。?)o格式符,以八進制數(shù)形式輸出整數(shù)。格式:%o,%mo,%lo,%mlo都可。
(3)x(或X)格式符,以十六進制數(shù)形式輸出整數(shù)。格式:%x,%mx,%lx,%mlx都可。
(4)u格式符,用來輸出unsigned型數(shù)據(jù),即無符號數(shù),以十進制數(shù)形式輸出。格式:%u,%mu,%lu都可。
參見:li4-3.c/*無符號數(shù)據(jù)的輸出*/
(5)c格式符,用來輸出一個字符。格式:%c,%mc都可。
(6)s格式符,用來輸出一個字符串。格式:%s,%ms,%-ms,%m.ns,%-m.ns都可。
參見:li4-5.c /*字符串的輸出*/
(7)f格式符,用來輸出實數(shù)(包括單、雙精度),以小數(shù)形式輸出。格式:%f,%m.nf,%-m.nf都可。
注意:單精度實數(shù)的有效位數(shù)一般為7位,雙精度為16位。
參見:li4-6.c/*輸出單精度實數(shù)時的有效位數(shù)*/
li4-7.c/*輸出雙精度實數(shù)時的有效位數(shù)*/
li4-8.c/*輸出實數(shù)時指定小數(shù)位數(shù)*/
?。?)e(或E)格式符,以指數(shù)形式輸出實數(shù)。格式:%e,%m.ne,%-m.ne都可。
(9)g(或G)格式符,用來輸出實數(shù),它根據(jù)數(shù)值的大小,自動選f格式或e格式(選擇輸出時占寬度較小的一種)。
3.說明
?。?)除了X、E、G(用大寫字母表示)外,其他格式字符必須用小寫字母;
?。?)“格式控制”字符串內(nèi)可以包含轉(zhuǎn)義字符;
?。?)如果想輸出字符“%”,則應(yīng)該在“格式控制”字符串中用連續(xù)兩個%表示,如:
printf("%f%%",1.0/3);
?。?)格式字符表參見下表
表4.1 printf格式字符
格式字符 說 明
d,i 以帶符號的十進制形式輸出整數(shù)(正數(shù)不輸出符號)
o 以八進制無符號形式輸出整數(shù)(不輸出前導(dǎo)符0)
x,X 以十六進制無符號形式輸出整數(shù)(不輸出前導(dǎo)符0x),用x則輸出十六進制數(shù)的a~f時以小寫形式輸出,用X時,則以大寫字母輸出
u 以無符號十進制形式輸出整數(shù)
c 以字符形式輸出,只輸出一個字符
s 輸出字符串
f 以小數(shù)形式輸出單、雙精度數(shù),隱含輸出6位小數(shù)
e,E 以指數(shù)形式輸出實數(shù)
g,G 選用%f或%e格式中輸出寬度較短的一種格式,不輸出無意義的0
表4.2 printf的附加格式說明字符
字符
說明
字母l
用于長整型整數(shù),可加在格式符d、o、x、u前面
m(代表一個正整數(shù))
數(shù)據(jù)最小寬度
n(代表一個正整數(shù))
對實數(shù),表示輸出n位小數(shù);對字符串,表示截取的字符個數(shù)
-
輸出的數(shù)字或字符在域內(nèi)向左靠