C語(yǔ)言之printf函數(shù)的用法

C語(yǔ)言之printf函數(shù)的用法

——TechZone(Harris)


? printf所坯,即格式化輸出,是C語(yǔ)言中常用的輸出函數(shù)宪迟。本節(jié)內(nèi)容咱們就來(lái)講講關(guān)于這個(gè)函數(shù)的一些用法贼陶。

? 我們?cè)凇?a href="http://www.reibang.com/p/7c1e13f21335" target="_blank">第一個(gè)C語(yǔ)言程序》中有粗略地提到了printf函數(shù)送挑,小伙伴們應(yīng)該也對(duì)這個(gè)函數(shù)有了一個(gè)大致的了解,大概知道了是用來(lái)輸出數(shù)據(jù)用的午笛。但是渣刷,我們既然說(shuō)它是個(gè)函數(shù)鱼辙,那么就應(yīng)該有挺多豐富的用法等著我們來(lái)發(fā)掘。那我們就一起來(lái)看看到底有哪些方法玫镐。

初窺門(mén)徑

? 我們還是從那個(gè)最簡(jiǎn)單的C語(yǔ)言程序開(kāi)始:

#include <stdio.h>
int main(void)
{
    printf("Hello, world!\n");
    return 0;
}

printf函數(shù)有個(gè)括號(hào)倒戏,那么這個(gè)函數(shù)的所有參數(shù)都是放在這個(gè)括號(hào)里面的。什么意思呢恐似,printf這個(gè)函數(shù)就像是一個(gè)工具杜跷,這個(gè)工具有許許多多的功能。如何去設(shè)置這個(gè)工具矫夷,讓它達(dá)到我們想要的效果葛闷,就只需要把我們的想法寫(xiě)在括號(hào)里就完事兒啦。

? 但是呢双藕,這個(gè)工具并沒(méi)有搭載目前最新最火的人工智能孵运,比如你這么寫(xiě)
printf(讓"Hello, world!\n"這個(gè)東西給勞資居中),這樣肯定不行蔓彩,因?yàn)閜rintf看不懂呀治笨。只有寫(xiě)出它看得懂的東西,它才會(huì)聽(tīng)話赤嚼,乖乖給我們工作旷赖。你要是說(shuō)些它聽(tīng)不懂的,那它就直接罷工不干啦更卒,你就跟老板解釋去吧等孵!(printf:別說(shuō)人話了,我聽(tīng)不懂)

正式開(kāi)始

? 既然想要函數(shù)聽(tīng)懂我們?cè)谡f(shuō)什么蹂空,就要遵循它的方式俯萌。那么我們先來(lái)了解下printf的通式:

printf(輸出框架*格式化設(shè)置,附加參數(shù))

參數(shù)解析

  • 輸出框架

    ? 我們上面那個(gè)printf("Hello, world!\n")中,就只用到了輸出框架這一個(gè)參數(shù)上枕。有的小伙伴可能會(huì)問(wèn)了咐熙,我們看到的全部?jī)?nèi)容不就是引號(hào)里面的嗎?咋叫框架呢辨萍?

    ? 其實(shí)不然棋恼,我們還只用了一個(gè)參數(shù),別急锈玉,后面大家就知道啦爪飘。

  • 格式化設(shè)置

    ? 這個(gè)星號(hào)其實(shí)是沒(méi)有的,這里只是告訴大家這兩個(gè)參數(shù)之間是連接起來(lái)的拉背,需要空格师崎。

    ? 此處的語(yǔ)法通式為:
    %[標(biāo)志] [寬度] [精度] [長(zhǎng)度修飾符] 轉(zhuǎn)換字符

    ? 其中,帶中括號(hào)的是可選參數(shù)椅棺,帶的是必選參數(shù)犁罩。

    1. 轉(zhuǎn)換字符:

      字符 含義
      c char齐蔽;字符
      d int;帶符號(hào)的十進(jìn)制整數(shù)
      i 同上
      e double昼汗;以指數(shù)形式輸出單、雙精度浮點(diǎn)數(shù)
      E 同上
      f double鬼雀;以小數(shù)的形式輸出單顷窒、雙精度浮點(diǎn)數(shù)(指數(shù)顯示小寫(xiě)e)
      g double;以%f或%e中較短的一種方式輸出單源哩、雙精度浮點(diǎn)數(shù)(指數(shù)顯示小寫(xiě)e)
      G 同上鞋吉,指數(shù)顯示大寫(xiě)E
      o unsigned int;無(wú)符號(hào)八進(jìn)制(無(wú)前導(dǎo)0)
      s char励烦;字符串
      u int谓着;無(wú)符號(hào)十進(jìn)制
      x unsigned int;無(wú)符號(hào)十六進(jìn)制(無(wú)前導(dǎo)0x)
      X 同上(無(wú)前導(dǎo)0X)
      p void坛掠;指針值
      n int赊锚;用于存放已寫(xiě)字符的個(gè)數(shù)到變量,不用于輸出
      % 不進(jìn)行參數(shù)轉(zhuǎn)換屉栓;%本身
  1. 標(biāo)志:

    標(biāo)志 含義
    - 指定被轉(zhuǎn)換的參數(shù)在其字段內(nèi)左對(duì)齊(默認(rèn)是右對(duì)齊)
    + 給數(shù)加上正負(fù)號(hào)
    [空格] 若非負(fù)數(shù)則加上空格
    0 對(duì)于數(shù)值轉(zhuǎn)換舷蒲,當(dāng)輸出長(zhǎng)度小于字段寬度時(shí),添加前導(dǎo)0補(bǔ)充
    # 指定另一種輸出方式
    1. 若轉(zhuǎn)換字符為o友多,則第一個(gè)數(shù)為0
    2. 若轉(zhuǎn)換字符為x或X牲平,則在輸出的非零值前加0x或0X
    3. 對(duì)于轉(zhuǎn)換字符為e、E域滥、f纵柿、g或G,則輸出的數(shù)總包含一個(gè)小數(shù)點(diǎn)启绰。
    另外昂儒,對(duì)于轉(zhuǎn)換字符g或G,還將尾部無(wú)意義的0保留
  2. 寬度:

    轉(zhuǎn)換后的參數(shù)輸出寬度至少達(dá)到這個(gè)值委可,若不足則在左邊或右邊填補(bǔ)空格或者0荆忍。具體看標(biāo)志的設(shè)置,若無(wú)撤缴,默認(rèn)左邊填充空格刹枉。

  3. 精度:

    這里要聲明一下,只有這個(gè)參數(shù)前面是要加點(diǎn)號(hào)"."來(lái)分隔的屈呕,

    對(duì)于字符串微宝,它指定打印的字符的最大個(gè)數(shù)

    對(duì)于整數(shù)虎眨,它指定打印字符的位數(shù)蟋软,必要時(shí)加0來(lái)填補(bǔ)镶摘。

    對(duì)于轉(zhuǎn)換字符為e、E或f岳守,它指定打印的小數(shù)點(diǎn)后的數(shù)字位數(shù)凄敢。

    對(duì)于轉(zhuǎn)換字符為g或G,它指定打印的有效數(shù)字位數(shù)湿痢。

  4. 長(zhǎng)度修飾符:

    修飾符 含義
    hh 按signed char或unsigned char類(lèi)型輸出
    h 按short或unsignedshort輸出
    l 按long或unsigned long輸出
    ll 按long long或者unsigned long long輸出
    L 按long double類(lèi)型輸出
  • 附加參數(shù)

    所謂附加參數(shù)涝缝,筆者也不做過(guò)多解釋。假設(shè)我有一個(gè)變量c譬重,在int c=3之后拒逮,我想要輸出c的值,該怎么辦呢臀规?

    有的小伙伴很聰明滩援,立馬說(shuō),Harris塔嬉!我知道玩徊,這樣不就行了:

    #include <stdio.h>
    int main(void)
    {
        int c=3;
        printf("C=3\n");
        return 0;
    }
    

是的,這樣做沒(méi)錯(cuò)谨究。我們的確正確輸出了整型變量c的值佣赖。但是,我們寫(xiě)程序记盒,很多時(shí)候時(shí)為了方便不懂程序的人來(lái)使用的憎蛤。我們知道c的值,那是因?yàn)槲覀兛吹枚a纪吮。

如果我要你輸出剛才用戶(hù)輸入的值俩檬,你怎么辦呢?那么這個(gè)時(shí)候碾盟,附加參數(shù)就大顯神威了棚辽。

#include <stdio.h>
int main(void)
{
    int c=3;//這里假定用戶(hù)已經(jīng)輸入了值
    printf("C的值為%d",c);
    return 0;
}

看到了吧。這里就把動(dòng)態(tài)的變量c嵌入到語(yǔ)句里面輸出了冰肴。

看到這里我相信小伙伴們應(yīng)該也明白了為啥我之前說(shuō)引號(hào)里面的是框架了屈藐。這就是所謂的格式化輸出,是不是有點(diǎn)只可意會(huì)不可言傳的感覺(jué)呢熙尉?

今天的內(nèi)容基本就到這里結(jié)束啦联逻。不過(guò)Harris在這里給大家留個(gè)懸念,大家可以自己回去自己的編譯器上實(shí)驗(yàn)一下检痰,看看能不能理解輸出的結(jié)果包归?具體原理以后會(huì)講,所以不理解沒(méi)關(guān)系铅歼,學(xué)好上面的內(nèi)容就很棒啦公壤!

#include <stdio.h>
int main(void)
{
    char C = 'c';
    printf("%c=%d",C,C);
    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末换可,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子厦幅,更是在濱河造成了極大的恐慌沾鳄,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件确憨,死亡現(xiàn)場(chǎng)離奇詭異译荞,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)缚态,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)磁椒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)堤瘤,“玉大人玫芦,你說(shuō)我怎么就攤上這事”痉” “怎么了桥帆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,815評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)慎皱。 經(jīng)常有香客問(wèn)我老虫,道長(zhǎng),這世上最難降的妖魔是什么茫多? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,537評(píng)論 1 296
  • 正文 為了忘掉前任祈匙,我火速辦了婚禮,結(jié)果婚禮上天揖,老公的妹妹穿的比我還像新娘夺欲。我一直安慰自己,他們只是感情好今膊,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布些阅。 她就那樣靜靜地躺著,像睡著了一般斑唬。 火紅的嫁衣襯著肌膚如雪市埋。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,184評(píng)論 1 308
  • 那天恕刘,我揣著相機(jī)與錄音缤谎,去河邊找鬼。 笑死褐着,一個(gè)胖子當(dāng)著我的面吹牛弓千,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播献起,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼洋访,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼镣陕!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起姻政,我...
    開(kāi)封第一講書(shū)人閱讀 39,668評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤呆抑,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后汁展,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體鹊碍,經(jīng)...
    沈念sama閱讀 46,212評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評(píng)論 3 340
  • 正文 我和宋清朗相戀三年食绿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了侈咕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,438評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡器紧,死狀恐怖耀销,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情铲汪,我是刑警寧澤熊尉,帶...
    沈念sama閱讀 36,128評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站掌腰,受9級(jí)特大地震影響狰住,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜齿梁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評(píng)論 3 333
  • 文/蒙蒙 一催植、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧勺择,春花似錦创南、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,279評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至芳撒,卻和暖如春邓深,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背笔刹。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,395評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工芥备, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人舌菜。 一個(gè)月前我還...
    沈念sama閱讀 48,827評(píng)論 3 376
  • 正文 我出身青樓萌壳,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子袱瓮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容