"格式描述串"是由一系列的"格式轉換說明符號"組成,格式轉換說明符號的描述形式如下:
% [+][-] 0 m[.n] [輸出精度] <形式字母>
%c 字元
%d 十進位整數
%e 浮點數,指數e的形式
%s 字串 %E 浮點數,指數E的形式
%u 無符號十進位整數
%f 浮點數,小數點形式
%g 輸出%f與%e較短者
%o 無符號八進位整數
%G 輸出%F與%E較短者
%x 無符號十六進位整數,以0~f表示
%X 無符號十六進位整數,以0~F表示
%l 長整型,加在d,o,u,x,X之前,如%ld(注意%l是英文字母l,不是數字1)
(1)形式字母:制定輸出格式,如表
d:十進位整型數
i:十進位整型數
x:十六進位整型數
o:八進位整型數
u:無符號十進位整型數
c:單個字元;
s:字串
e:指數形式的浮點數
f:小數形式的浮點數
g:e和f中比較短的一種
p:顯示變數所在的記憶體位址
n:它不是向printf()傳遞格式化資訊,而是令printf()把自己已經輸出的字元總數放到相應變元指 的整形變數中
%:符號%本身;
(2):輸出精度如果形式字母是d,x,o.u,則可以指定如下兩類精度 l:long型輸出精度 h:short型輸出精度 預設時為int型精度 如:long x=123454578;printf("%d",x);
如果形式字母為e,f,g的時候,則指定l的 時候為double精度,不指定為float精度;
(3):m[.n]指定輸出長度,如果輸出的是執行個體,則m表示該項輸出佔用字元位置的總長度,n表示小數部分的字 符長度,如float x=4.56;printf("%7.4f",x);
(4)0:指定不被使用的空位置填寫0,入股不指定使用0,則不使用的位置為空白.該項僅僅對樹枝輸出時才可 以指定,對字串輸出不用指定.例如 int x=234; printf("%05d",x);//00234 printf("%5d",x);//**234 (5)[+][-]:指定輸出位置,如果指定+或者預設時為靠右對齊,如果為"-"的時候為靠左對齊;
一、格式符含義
1、d格式符:按十進位格式輸出。
%d 輸出數字長度為變數數值的實際長度
%md 輸出m位(不足補空格,大於m位時按實際長度輸出)
%ld,%mld l(小寫字母L)表示輸出“長整型”資料
%0md,%0mld 0(數字0)表示位元不足m時補0
註:%後面的m(位元控制)、0(位元不足補0)對於其他格式符也適用。
例:(□表示空格)
int i=123;
long j=123456;
printf("%d□5d□05d,□ld□8ld□08ld",i,i,i,j,j,j);
輸出:123□□□123□00123,□123456□□□123456□00123456
2、o(字母)格式符:按八進位格式輸出。(不會出現負數格式)
3、x格式符:按十六進位格式輸出。(不會出現負數格式)
4、u格式符:用於輸出unsigned類型資料。
例:main()
{
unsigned int a=65535;
int b=-2;
printf("a=%d,%o,%x,%u/n",a,a,a,a);
printf("a=%d,%o,%x,%u/n",b,b,b,b);
}
輸出:a=-1,177777,ffff,65535
b=-2,177776,fffe,65534
5、c格式符:以字元形式輸出。
6、s格式符:以字串格式輸出。
例:printf("%s","CHINA");
%ms m指定寬度(不足時左補空格,大於時按實際寬度輸出)
%-ms 靠左對齊,不足m時右補空格
%m.ns 輸出佔m個字元位置,其中字元數最多n個,左補空格
%-m.ns 同上,右補空格
7、f格式符:按實數格式輸出。
%f 按實數格式輸出,整數部分按實際位元輸出,6位小數
%m.nf 總位元m(含小數點),其中n位小數
%-m.nf 同上,靠左對齊
例:main()
{ float x, y;
x=111111.111; y=222222.222;
printf("%f", x+y);
}
程式輸出: 333333.328152(實數運算中誤差不可避免)
例:main()
{ double x,y; double x2,y2;
x=1111111111111.111111111; y=2222222222222.222222222;
x2=1111111111111.111; y2=2222222222222.222;
printf("%f %f", x+y, x2+y2); /* 13位整數,9位小數 */
}
程式輸出: 3333333333333.333010 3333333333333.333010(相同)
注意
從以上兩例可以看出,實數運算中誤差不可避免,double比float精度高。
float實數(單精確度)的有效位元是7位,double實數(雙精確度)的有效位元是16位,超過有效位元的輸出和輸入均無意義。
例:
main()
{ float f=123.456;
printf("%f□□%10f□□%10.2f□□%.2f□□%-10.2f",f,f,f,f,f);
}
輸出結果:
123.455994□□123.455994□□□□□□123.46□□123.46□□123.46
8、e格式符:以指數形式輸出實數。%e 輸出13位,其中:1位整數,1位小數點,6位小數,5位指數(含字元e和指數的符號)
9、g格式符:根據數值大小,自動選擇f或e格式輸出。
1、%是printf()的格式說明符,若要直接輸出字元%,在格式控制中使用兩個連續的%。
例:printf("%f%%", 1.0/3) 輸出: 0.333333%。
2、通常在有格式字元o和x按八進位和十六進位形式輸出整數時,在數值前不出現0和0x,可在%和格式字元間插入#來實現。
例:printf(“%o,%#o,%x,%#x/n”,10,10,10,10);
輸出:12,012,a,0xa
3、指定輸出寬度的同時指定靠左對齊可在寬度前插入“-”來實現
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/evanever/archive/2008/07/07/2620891.aspx"格式描述串"是由一系列的"格式轉換說明符號"組成,格式轉換說明符號的描述形式如下:
% [+][-] 0 m[.n] [輸出精度] <形式字母>
(1)形式字母:制定輸出格式,如表
d:十進位整型數
i:十進位整型數
x:十六進位整型數
o:八進位整型數
u:無符號十進位整型數
c:單個字元;
s:字串
e:指數形式的浮點數
f:小數形式的浮點數
g:e和f中比較短的一種
p:顯示變數所在的記憶體位址
n:它不是向printf()傳遞格式化資訊,而是令printf()把自己已經輸出的字元總數放到相應變元指 的整形變數中
%:符號%本身;
(2):輸出精度如果形式字母是d,x,o.u,則可以指定如下兩類精度 l:long型輸出精度 h:short型輸出精度 預設時為int型精度 如:long x=123454578;printf("%d",x);
如果形式字母為e,f,g的時候,則指定l的 時候為double精度,不指定為float精度;
(3):m[.n]指定輸出長度,如果輸出的是執行個體,則m表示該項輸出佔用字元位置的總長度,n表示小數部分的字 符長度,如float x=4.56;printf("%7.4f",x);
(4)0:指定不被使用的空位置填寫0,入股不指定使用0,則不使用的位置為空白.該項僅僅對樹枝輸出時才可 以指定,對字串輸出不用指定.例如 int x=234; printf("%05d",x);//00234 printf("%5d",x);//**234 (5)[+][-]:指定輸出位置,如果指定+或者預設時為靠右對齊,如果為"-"的時候為靠左對齊;
一、格式符含義
1、d格式符:按十進位格式輸出。
%d 輸出數字長度為變數數值的實際長度
%md 輸出m位(不足補空格,大於m位時按實際長度輸出)
%ld,%mld l(小寫字母L)表示輸出“長整型”資料
%0md,%0mld 0(數字0)表示位元不足m時補0
註:%後面的m(位元控制)、0(位元不足補0)對於其他格式符也適用。
例:(□表示空格)
int i=123;
long j=123456;
printf("%d□5d□05d,□ld□8ld□08ld",i,i,i,j,j,j);
輸出:123□□□123□00123,□123456□□□123456□00123456
2、o(字母)格式符:按八進位格式輸出。(不會出現負數格式)
3、x格式符:按十六進位格式輸出。(不會出現負數格式)
4、u格式符:用於輸出unsigned類型資料。
例:main()
{
unsigned int a=65535;
int b=-2;
printf("a=%d,%o,%x,%u/n",a,a,a,a);
printf("a=%d,%o,%x,%u/n",b,b,b,b);
}
輸出:a=-1,177777,ffff,65535
b=-2,177776,fffe,65534
5、c格式符:以字元形式輸出。
6、s格式符:以字串格式輸出。
例:printf("%s","CHINA");
%ms m指定寬度(不足時左補空格,大於時按實際寬度輸出)
%-ms 靠左對齊,不足m時右補空格
%m.ns 輸出佔m個字元位置,其中字元數最多n個,左補空格
%-m.ns 同上,右補空格
7、f格式符:按實數格式輸出。
%f 按實數格式輸出,整數部分按實際位元輸出,6位小數
%m.nf 總位元m(含小數點),其中n位小數
%-m.nf 同上,靠左對齊
例:main()
{ float x, y;
x=111111.111; y=222222.222;
printf("%f", x+y);
}
程式輸出: 333333.328152(實數運算中誤差不可避免)
例:main()
{ double x,y; double x2,y2;
x=1111111111111.111111111; y=2222222222222.222222222;
x2=1111111111111.111; y2=2222222222222.222;
printf("%f %f", x+y, x2+y2); /* 13位整數,9位小數 */
}
程式輸出: 3333333333333.333010 3333333333333.333010(相同)
注意
從以上兩例可以看出,實數運算中誤差不可避免,double比float精度高。
float實數(單精確度)的有效位元是7位,double實數(雙精確度)的有效位元是16位,超過有效位元的輸出和輸入均無意義。
例:
main()
{ float f=123.456;
printf("%f□□%10f□□%10.2f□□%.2f□□%-10.2f",f,f,f,f,f);
}
輸出結果:
123.455994□□123.455994□□□□□□123.46□□123.46□□123.46
8、e格式符:以指數形式輸出實數。%e 輸出13位,其中:1位整數,1位小數點,6位小數,5位指數(含字元e和指數的符號)
9、g格式符:根據數值大小,自動選擇f或e格式輸出。
1、%是printf()的格式說明符,若要直接輸出字元%,在格式控制中使用兩個連續的%。
例:printf("%f%%", 1.0/3) 輸出: 0.333333%。
2、通常在有格式字元o和x按八進位和十六進位形式輸出整數時,在數值前不出現0和0x,可在%和格式字元間插入#來實現。
例:printf(“%o,%#o,%x,%#x/n”,10,10,10,10);
輸出:12,012,a,0xa
3、指定輸出寬度的同時指定靠左對齊可在寬度前插入“-”來實現
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/evanever/archive/2008/07/07/2620891.aspx