目錄
1.printf是什么?
2.格式控制字符串 與 輸出值參數(shù)表
2.1格式控制字符串
2.2輸出值參數(shù)表
2.3格式字符 和 格式修飾符 一覽圖?
2.3.1格式字符一覽圖
2.3.2格式修飾符
?3.常用格式字符詳解
?%d
%md?
?%f
%.nf
%m.f
?%c和%s
%c
%s
?6.printf的返回值
5.printf中的常見(jiàn)問(wèn)題
6.總結(jié)?
7.后言
1.printf是什么?
printf函數(shù)是格式輸出函數(shù),其關(guān)鍵字最末一個(gè)字母f即為“格式(format)”之意。其功能是按照用戶(hù)指定的格式,把指定的數(shù)據(jù)顯示到顯示器屏幕上。
printf函數(shù)是一個(gè)標(biāo)準(zhǔn)庫(kù)函數(shù),它是函數(shù)原型在頭文件“stdio.h”。但作為一個(gè)特例,不要求在使用printf函數(shù)之前必須包含stdio.h文件。printf函數(shù)調(diào)用的一般形式為:
printf(“格式控制字符串”,輸出表列)?
printf("f=%f,c=%f\n",f,c);
?其中,f=%f,c=%f\n?是格式控制字符串,f,c?是輸出值參數(shù)表。
2.格式控制字符串 與 輸出值參數(shù)表
printf("f=%f,c=%f\n",f,c);
2.1格式控制字符串
格式控制字符串是用"雙引號(hào)"括起來(lái)的字符串,包括三類(lèi)信息:
- 格式字符。格式字符由“%”引導(dǎo),如%d、%f等。它的作用是控制輸出字符的格式。
- 轉(zhuǎn)義字符。格式控制字符串里的轉(zhuǎn)義字符按照轉(zhuǎn)義后的含義輸出,如上面printf函數(shù)雙引號(hào)內(nèi)的換行符“\n”,即輸出回車(chē)。
- 普通字符。普通字符即需要在輸出時(shí)原樣輸出的字符,如上面printf函數(shù)中雙引號(hào)內(nèi)的“f=”和“c= ”部分。
2.2輸出值參數(shù)表
(2)輸出值參數(shù)表是需要輸出的數(shù)據(jù)項(xiàng)的列表,輸出數(shù)據(jù)項(xiàng)可以是常量、變量或表達(dá)式,輸出值參數(shù)之間用逗號(hào)分隔,其類(lèi)型應(yīng)與格式字符相匹配。每個(gè)格式字符和輸出值參數(shù)表中的輸出值參數(shù)一一對(duì)應(yīng),如果沒(méi)有輸出參數(shù)時(shí),格式控制字符串中不再需要格式字符。??
2.3格式字符 和 格式修飾符 一覽圖?
2.3.1格式字符一覽圖
格式字符 | 說(shuō)明 |
d | 輸出帶符號(hào)的十進(jìn)制整數(shù),正數(shù)的符號(hào)省略 |
u | 以無(wú)符號(hào)的十進(jìn)制整數(shù)形式輸出 |
o | 以無(wú)符號(hào)的八進(jìn)制整數(shù)形式輸出,不輸出前導(dǎo)符0 |
x | 以無(wú)符號(hào)十六進(jìn)制整數(shù)形式(小寫(xiě))輸出,不輸出前導(dǎo)符0x |
X | 以無(wú)符號(hào)十六進(jìn)制整數(shù)形式(大寫(xiě))輸出,不輸出前導(dǎo)符0X |
f | 以小數(shù)形式輸出單、雙精度數(shù),隱含輸出6位小數(shù) |
e | 以指數(shù)形式(小寫(xiě)e表示指數(shù)部分)輸出實(shí)數(shù) |
E | 以指數(shù)形式(大寫(xiě)E表示指數(shù)部分)輸出實(shí)數(shù) |
g | 自動(dòng)選取f或e中輸出寬度較小的一種使用,且不輸出無(wú)意義的0 |
c | 輸出一個(gè)字符 |
s | 輸出字符串 |
注:%o %x %X如果向輸出前導(dǎo)符要在格式字符前加#, 如%#o %#x %#X 。
2.3.2格式修飾符
格式修飾符 | 說(shuō)明 |
英文字母l | 修飾格式字符d、u、o、x時(shí),用于輸出long型數(shù)據(jù) |
英文字母L | 修飾格式字符f、e、g時(shí),用于輸出long double型數(shù)據(jù) |
英文字母h | 修飾格式字符d、o、x時(shí),用于輸出short型數(shù)據(jù) |
輸出域?qū)抦(m為整數(shù)) | 指定輸出項(xiàng)輸出時(shí)所占的列數(shù) |
顯示精度.n | (n為整數(shù))?? ?對(duì)于實(shí)數(shù),表示輸出n位小數(shù);對(duì)于字符串,表示截取的字符個(gè)數(shù) |
-(減號(hào)) | 輸出數(shù)字或字符在域內(nèi)向左靠 |
?3.常用格式字符詳解
?%d
?輸出帶符號(hào)的十進(jìn)制整數(shù),正數(shù)的符號(hào)不輸出。
int a = 888,b = -666;
printf("%d\n%d",a,b);
?輸出結(jié)果:
?還可以在%和格式字符中間插入格式修飾符,用于指定輸出數(shù)據(jù)的域?qū)挘ㄋ嫉牧袛?shù)),如用“%5d”,指定輸出數(shù)據(jù)占5列,輸出的數(shù)據(jù)在域內(nèi)向右靠齊。如:
%md?
int a = 888, b = -666;
printf("%5d\n%5d", a, b);
輸出結(jié)果:?
從結(jié)果可以看出,在%和d中間加數(shù)字5,888占3個(gè)域?qū)挘?/strong>指定域?qū)?gt;輸出數(shù)據(jù)長(zhǎng)度。輸出數(shù)據(jù)靠右,前面補(bǔ)空格。
如果 指定域?qū)?lt;輸出數(shù)據(jù)長(zhǎng)度 呢?
?可見(jiàn)會(huì)按照原樣輸出。
若要輸出long(長(zhǎng)整型)數(shù)據(jù),則在格式字符d前面加字母l(代表long),即“%ld”。
?%f
?輸出一個(gè)實(shí)數(shù)(包括單精度、雙精度、長(zhǎng)雙精度),以小數(shù)形式輸出,有以下幾種用法:
不指定輸出數(shù)據(jù)的長(zhǎng)度,由系統(tǒng)根據(jù)數(shù)據(jù)的實(shí)際情況決定數(shù)據(jù)所占的列數(shù)。系統(tǒng)處理的方法一般是:實(shí)數(shù)中的整數(shù)部分全部輸出,小數(shù)部分輸出6位。
雖然a是double類(lèi)型,所以 a/3也是double類(lèi)型。但%f格式字符只能輸出6位小數(shù)。
那怎么控制輸出小數(shù)點(diǎn)后面的位數(shù)呢??
%.nf
n表示小數(shù)點(diǎn)后保留n位小數(shù)。如下
當(dāng)然浮點(diǎn)型也可以控制域?qū)?如下
%m.f
可以看出 %3.f 實(shí)際是 %3.0f,小數(shù)點(diǎn)前面控制域?qū)?/span>,小數(shù)點(diǎn)后面控制小數(shù)點(diǎn)保留的個(gè)數(shù)。
?%c和%s
%c
也可以加格式修飾符指定域?qū)挘纾?/p>
可見(jiàn)字符a前面補(bǔ)4個(gè)空格。因?yàn)樽址鸻占一個(gè)占位。
%s
?
?6.printf的返回值
初學(xué)C語(yǔ)言時(shí)用的最多的函數(shù)就是printf函數(shù),而printf函數(shù)的返回值是被大多數(shù)人忽略的,以至于很多應(yīng)聘者在碰到關(guān)于printf返回值的編程時(shí)一頭霧水,接下來(lái)就來(lái)談?wù)刾rintf的返回值。
int A=43;
printf("%d\n",printf("%d",printf("%d",A)));
看到運(yùn)行結(jié)果和代碼,可以想到是為什么嗎?沒(méi)看出也沒(méi)關(guān)系,我們分步驟看看。
?代碼邏輯:首先,從最內(nèi)層開(kāi)始A=43被直接輸出。然后,最內(nèi)層printf的返回值以%d的格式被中間層的printf輸出為2。最后,最外層的printf以%d的格式輸出中間層的返回值為1。
其實(shí)觀(guān)察第二個(gè)printf的輸出值和第三個(gè)printf的輸出值,第一個(gè)printf的輸出值和第二個(gè)printf的輸出值不難發(fā)現(xiàn):
printf的返回值就是輸出的字符數(shù)量第三個(gè)printf輸出"43"字符數(shù)量為2,于是返回值為2,第二個(gè)printf就輸出"2”
第二個(gè)printf輸出"2"字符數(shù)量為1,于是返回值為1,第一個(gè)printf就輸出"1"
要注意一點(diǎn)是:返回值是是輸出的字符數(shù)量,包括數(shù)字,字母,標(biāo)點(diǎn)符號(hào),空格等。
printf("%d\n", printf("0,1,2,3\n"));
通過(guò)運(yùn)行結(jié)果不難看出,數(shù)字0123分別占一個(gè)字符,標(biāo)點(diǎn)符號(hào)" , "也是分別占一個(gè)字符位,換行符" \n "也是占一個(gè)。
如果代碼加一句,猜猜num的值是多少?
int num=printf("%d\n", printf("0,1,2,3\n")); printf("%d", num);
答案是2,num值為2說(shuō)明num接受printf的返回值是2,也說(shuō)明了printf輸出字符數(shù)量是2,其中一個(gè)是數(shù)字8,另外一個(gè)就是printf格式控制中的 " \n "可見(jiàn),格式控制中的字符也算進(jìn)返回值哦!
那有人又問(wèn)了?為什么第一次結(jié)果不是9呢?
因?yàn)槭窍容敵隽?,再換行啊。要注意執(zhí)行先后順序!??!
5.printf中的常見(jiàn)問(wèn)題
- 格式控制字符串中有%引導(dǎo)的格式字符時(shí),輸出值參數(shù)表中的數(shù)量以及類(lèi)型必須和格式字符一致
分析:
- 第一個(gè)printf函數(shù)中的輸出參數(shù)b是double型值58.8,但對(duì)應(yīng)的格式控制符為%d,當(dāng)類(lèi)型不一致時(shí)并不會(huì)進(jìn)行類(lèi)型轉(zhuǎn)換,而會(huì)將實(shí)際轉(zhuǎn)入的double型值當(dāng)作需要的整形類(lèi)型來(lái)理解,因此出現(xiàn)非預(yù)期結(jié)果;
- 第二個(gè)printf函數(shù)中,格式控制字符串給出了兩個(gè)%引導(dǎo)的格式字符,但是輸出參數(shù)表中只有一個(gè)參數(shù)a,參數(shù)缺少。因此輸出c的值默認(rèn)為內(nèi)存中a變量后面存儲(chǔ)單元的數(shù)據(jù)值,c的值無(wú)法確定。
- 格式控制字符串中沒(méi)有%引導(dǎo)的格式字符時(shí),也不需要輸出值參數(shù)表,直接輸出字符串內(nèi)容,轉(zhuǎn)義字符按照轉(zhuǎn)義后的實(shí)際意義輸出,如:
- 實(shí)現(xiàn)左對(duì)齊方法?
- 通過(guò)“ - ”號(hào)來(lái)控制控制左對(duì)齊,可以無(wú)視域?qū)捒刂?/span>
6.總結(jié)?
- 常用的格式控制,一般是%d,%f,%c,%s,及其他們獨(dú)特的輸出方式
- 每一個(gè)輸出都可以設(shè)置域?qū)?,默認(rèn)內(nèi)容右對(duì)齊
- 格式控制字符串中有%引導(dǎo)的格式字符時(shí),輸出值參數(shù)表中的數(shù)量以及類(lèi)型必須和格式字符一致
- 格式控制字符串中沒(méi)有%引導(dǎo)的格式字符時(shí),也不需要輸出值參數(shù)表,直接輸出字符串內(nèi)容,轉(zhuǎn)義字符按照轉(zhuǎn)義后的實(shí)際意義輸出
- 實(shí)現(xiàn)左對(duì)齊方法?:通過(guò)“ - ”號(hào)來(lái)控制控制左對(duì)齊
出生日期輸入輸出_??皖}霸_??途W(wǎng) (nowcoder.com)
小練習(xí)題,可以考核自己掌握了嗎?
7.后言
本篇比較詳細(xì)的介紹了C語(yǔ)言中,printf函數(shù)的概念,使用方法,注意事項(xiàng),和實(shí)踐操作。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-513550.html
因篇幅有限,和個(gè)人能力有限,可能存在內(nèi)容不完整和錯(cuò)誤,希望大家積極指正。我相信此文章可以給小白一定的幫助,大佬也可以當(dāng)復(fù)習(xí),感謝大家支持。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-513550.html
到了這里,關(guān)于【C語(yǔ)言】printf你真的用明白了嗎?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!