久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > printf格(ge)式(shi)化輸出函數(shu)詳解,并附帶(dai)最新典型(xing)案例

printf格式(shi)化輸出函數詳解(jie),并(bing)附帶(dai)最新典型案(an)例 時間:2018-06-14      來源:未知

printf函數(shu)(shu)是(shi)一個(ge)標準庫函數(shu)(shu),它(ta)的函數(shu)(shu)原型在頭文件(jian)(jian)“stdio.h”中。但作為一個(ge)特(te)例,不要求在使用(yong) printf 函數(shu)(shu)之前必須包含stdio.h文件(jian)(jian)。printf函數(shu)(shu)調用(yong)的一般形(xing)式為:

printf(“格(ge)式控制字符串(chuan)”, 輸出表列(lie))

其中(zhong)格(ge)式(shi)(shi)控制字符(fu)串(chuan)用于指定輸出格(ge)式(shi)(shi)。格(ge)式(shi)(shi)控制串(chuan)可由格(ge)式(shi)(shi)字符(fu)串(chuan)和(he)非格(ge)式(shi)(shi)字符(fu)串(chuan)兩(liang)種(zhong)組(zu)成。格(ge)式(shi)(shi)字符(fu)串(chuan)是以(yi)%開頭的字符(fu)串(chuan),在%后(hou)面(mian)跟有各種(zhong)格(ge)式(shi)(shi)字符(fu),以(yi)說(shuo)明輸出數據的類型(xing)、形式(shi)(shi)、長度、小(xiao)數位數等。如:

“%d”表(biao)示(shi)按十進制整型輸出;

“%ld”表示按十進制長(chang)整型輸(shu)出;

“%c”表示按字符型輸出等。

非格式(shi)字(zi)符(fu)串(chuan)原樣輸(shu)出,在(zai)顯(xian)示中起(qi)提示作用。輸(shu)出表列中給出了(le)各個輸(shu)出項,要求(qiu)格式(shi)字(zi)符(fu)串(chuan)和各輸(shu)出項在(zai)數量和類型上(shang)應(ying)該一一對應(ying)。

【例4-3】printf函數舉例

#include

int main(void){

int a=88,b=89;

printf("%d %d\n",a,b);

printf("%d,%d\n",a,b);

printf("%c,%c\n",a,b);

printf("a=%d,b=%d",a,b);

return 0;

}

本例中(zhong)四次(ci)輸(shu)(shu)出(chu)了(le)a、b的(de)值(zhi)(zhi),但由(you)于格(ge)(ge)式(shi)控(kong)(kong)制(zhi)串(chuan)(chuan)不同,輸(shu)(shu)出(chu)的(de)結(jie)果也不相同。第3行(xing)的(de)輸(shu)(shu)出(chu)語句(ju)格(ge)(ge)式(shi)控(kong)(kong)制(zhi)串(chuan)(chuan)中(zhong),兩格(ge)(ge)式(shi)串(chuan)(chuan)%d 之間(jian)加了(le)一(yi)個空(kong)格(ge)(ge)(非(fei)(fei)格(ge)(ge)式(shi)字(zi)符(fu)(fu)),所以輸(shu)(shu)出(chu)的(de)a、b值(zhi)(zhi)之間(jian)有一(yi)個空(kong)格(ge)(ge)。第4行(xing)的(de)printf語句(ju)格(ge)(ge)式(shi)控(kong)(kong)制(zhi)串(chuan)(chuan)中(zhong)加入的(de)是非(fei)(fei)格(ge)(ge)式(shi)字(zi)符(fu)(fu)逗號,因(yin)此輸(shu)(shu)出(chu)的(de)a、b值(zhi)(zhi)之間(jian)加了(le)一(yi)個逗號。第5行(xing)的(de)格(ge)(ge)式(shi)串(chuan)(chuan)要(yao)求按字(zi)符(fu)(fu)型輸(shu)(shu)出(chu)a、b值(zhi)(zhi)。第6行(xing)中(zhong)為了(le)提示輸(shu)(shu)出(chu)結(jie)果又增加了(le)非(fei)(fei)格(ge)(ge)式(shi)字(zi)符(fu)(fu)串(chuan)(chuan)。

格式字符串

在Turbo C中(zhong)格式字(zi)符串的一般(ban)形式為:

[標志(zhi)][輸出最(zui)小寬度(du)(du)][.精(jing)度(du)(du)][長度(du)(du)]類型。

其中方(fang)括號[]中的項(xiang)為可選項(xiang)。

各項的意義介紹如下。

1) 類型

類(lei)型字符用以表(biao)示輸出(chu)數(shu)據的(de)類(lei)型,其格(ge)式符和(he)意(yi)義如下表(biao)所示:

格式(shi)字符意義

d以十進制形(xing)式輸(shu)出帶符(fu)(fu)號整數(shu)(正數(shu)不輸(shu)出符(fu)(fu)號)

o以八進制形式輸出無符號整數(shu)(不輸出前(qian)綴0)

x,X以十(shi)六進制形式(shi)輸出(chu)無(wu)符號整(zheng)數(不輸出(chu)前綴Ox)

u以十進制形(xing)式輸出無(wu)符號整數

f以小數形式(shi)輸出單、雙精(jing)度實數

e,E以指數形式輸出(chu)單、雙精度實(shi)數

g,G以%f或%e中較短的輸(shu)出寬度(du)輸(shu)出單、雙精度(du)實(shi)數

c輸(shu)出單個字(zi)符

s輸出字符串

2) 標志

標志(zhi)字符為(wei) -、+、# 和空格四種,其意(yi)義(yi)下表所示:

標 志意義

-結果左對齊,右邊填空格(ge)

+輸出符(fu)號(hao)(正號(hao)或負號(hao))

空格輸出值為(wei)正(zheng)時冠(guan)以空格,為(wei)負時冠(guan)以負號(hao)

#對c、s、d、u類無影響;

對o類,在輸出時加前綴o;

對x類,在輸(shu)出時加前綴0x;

對e、g、f 類(lei)當(dang)結(jie)果(guo)有小數時才(cai)給出小數點。

3) 輸出最小(xiao)寬度

用十進(jin)制(zhi)整數(shu)(shu)(shu)來(lai)表示輸(shu)出的最少(shao)位(wei)數(shu)(shu)(shu)。若實際(ji)位(wei)數(shu)(shu)(shu)多于定(ding)義(yi)的寬度,則按(an)實際(ji)位(wei)數(shu)(shu)(shu)輸(shu)出,若實際(ji)位(wei)數(shu)(shu)(shu)少(shao)于定(ding)義(yi)的寬度則補以空格或0。

4) 精度

精(jing)度格式符(fu)以(yi)“.”開頭,后跟十進制整數。本項(xiang)的(de)意義是(shi)(shi):如果輸出(chu)數字(zi),則(ze)表示(shi)小(xiao)數的(de)位數;如果輸出(chu)的(de)是(shi)(shi)字(zi)符(fu),則(ze)表示(shi)輸出(chu)字(zi)符(fu)的(de)個數;若實際位數大于(yu)所定義的(de)精(jing)度數,則(ze)截去超(chao)過的(de)部分(fen)。

5) 長度

長度格(ge)式符為h、l兩種,h表(biao)示(shi)按短整(zheng)型量輸出,l表(biao)示(shi)按長整(zheng)型量輸出。

【例4-4】

#include

int main(void){

int a=15;

long float b=123.1234567;

// 原來b的定義(yi)為 float b=123.1234567;

double c=12345678.1234567;

char d='p';

printf("a=%d\n", a);

printf("a(%%d)=%d, a(%%5d)=%5d, a(%%o)=%o, a(%%x)=%x\n\n",a,a,a,a); // %% 可以輸出 %

printf("a=%f\n", b);

printf("b(%%f)=%f, b(%%lf)=%lf, b(%%5.4lf)=%5.4lf, b(%%e)=%e\n\n",b,b,b,b);

printf("c=%f\n", c);

printf("c(%%lf)=%lf, c(%%f)=%f, c(%%8.4lf)=%8.4lf\n\n",c,c,c);

printf("d=%c\n", d);

 printf("d(%%c)=%c, d(%%8c)=%8c\n",d,d);

return 0;

}

運行結果:

本例中:

第11行以四種格式輸出整型變量a的值,其中“%5d ”要求(qiu)輸出寬度為5,而a值為15只有兩位故補三個空格。

第14行(xing)以四種格式輸(shu)出實(shi)型(xing)量b的值。其中“%f”和“%lf ”格式的輸(shu)出相同,說(shuo)明“l”符(fu)對“f”類型(xing)無影響。“%5.4lf”指定(ding)輸(shu)出寬度(du)為5,精度(du)為4,由于實(shi)際(ji)長度(du)超過5故應該(gai)按(an)實(shi)際(ji)位數輸(shu)出,小數位數超過4位部分(fen)被(bei)截去。

第(di)17行輸出(chu)雙精度實數,“%8.4lf ”由于指定精度為4位故截去(qu)了超過4位的部分。

第20行輸(shu)(shu)出(chu)字符(fu)量d,其中“%8c ”指(zhi)定輸(shu)(shu)出(chu)寬(kuan)度(du)為8故(gu)在(zai)輸(shu)(shu)出(chu)字符(fu)p之(zhi)前補加7個(ge)空格。

 使用printf函數時還要注(zhu)意一個(ge)問(wen)題,那就是輸出表列中的(de)求值順(shun)序(xu)。不同的(de)編譯(yi)系統不一定相同,可(ke)以從(cong)左到(dao)右,也可(ke)從(cong)右到(dao)左。Turbo C是按從(cong)右到(dao)左進行的(de)。請看下面兩個(ge)例子。

【例4-5】在一個printf()里輸出(chu)

#include

int main(void){

int i=8;

printf("The raw value: i=%d\n", i);

printf("++i=%d \n++i=%d \n--i=%d \n--i=%d\n",++i,++i,--i,--i);

return 0;

}

運行結果:

The raw value: i=8

++i=8

++i=7

--i=6

--i=7

【例4-6】在多個printf()里(li)輸出

#include

int main(void){

int i=8;

printf("The raw value: i=%d\n", i);

printf("++i=%d\n", ++i);

printf("++i=%d\n", ++i);

printf("--i=%d\n", --i);

printf("--i=%d\n", --i);

return 0;

}

運行結果:

格式化輸出函數

The raw value: i=8

++i=9

++i=10

--i=9

--i=8

 這兩個(ge)程(cheng)序的區(qu)別是(shi)用一個(ge)printf語句和多個(ge)printf 語句輸出(chu)(chu)。但從結果可(ke)以(yi)看出(chu)(chu)是(shi)不同(tong)的。為什(shen)么結果會不同(tong)呢?就是(shi)因為printf函數(shu)對輸出(chu)(chu)表中各量求值的順序是(shi)自右至(zhi)左進行(xing)的。

但(dan)是(shi)必(bi)須注意,求值順序雖(sui)是(shi)自右(you)至左,但(dan)是(shi)輸(shu)出順序還是(shi)從左至右(you),因此(ci)得到的結(jie)果是(shi)上述輸(shu)出結(jie)果。

下(xia)面是老代碼(ma)及(ji)分析:

【例4-5】

main(){

int i=8;

printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--);

}

【例4-6】

main(){

int i=8;

printf("%d\n",++i);

printf("%d\n",--i);

printf("%d\n",i++);

printf("%d\n",i--);

printf("%d\n",-i++);

printf("%d\n",-i--);

}

這兩(liang)個程序的區別是(shi)(shi)用一個printf語句和(he)多個printf 語句輸(shu)出(chu)。但從結果可(ke)以看出(chu)是(shi)(shi)不(bu)同(tong)的。為什么結果會不(bu)同(tong)呢?就是(shi)(shi)因為printf函數對(dui)輸(shu)出(chu)表中各量求值(zhi)的順序是(shi)(shi)自(zi)右至左進行的。在第(di)一例中,先對(dui)最后(hou)一項(xiang)“-i--”求值(zhi),結果為-8,然(ran)(ran)后(hou)i自(zi)減(jian)1后(hou)為7。 再(zai)對(dui)“-i++”項(xiang)求值(zhi)得-7,然(ran)(ran)后(hou)i自(zi)增(zeng)(zeng)(zeng)1后(hou)為8。再(zai)對(dui)“i--”項(xiang)求值(zhi)得8,然(ran)(ran)后(hou)i再(zai)自(zi)減(jian)1后(hou)為7。再(zai)求“i++”項(xiang)得7,然(ran)(ran)后(hou)i再(zai)自(zi)增(zeng)(zeng)(zeng)1后(hou)為8。 再(zai)求“--i”項(xiang),i先自(zi)減(jian)1后(hou)輸(shu)出(chu),輸(shu)出(chu)值(zhi)為7。 最后(hou)才求輸(shu)出(chu)表列中的第(di)一項(xiang)“++i”,此(ci)時(shi)i自(zi)增(zeng)(zeng)(zeng)1后(hou)輸(shu)出(chu)8。

上一篇:什么是二進制,這里讓你通俗易懂

下一篇:write()函數的功能介紹及實例

熱(re)點文(wen)章(zhang)推薦
華清學(xue)員就業榜單
高薪學員(yuan)經驗(yan)分享(xiang)
熱點新(xin)聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽(qia)談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部