笨辦法學(xué)C 練習(xí)3:格式化輸出

練習(xí)3:格式化輸出

原文:Exercise 3: Formatted Printing

譯者:飛龍

不要?jiǎng)h除Makefile,因?yàn)樗梢詭湍阒赋鲥e(cuò)誤吴超,以及當(dāng)我們需要自動(dòng)化處理一些事情時(shí),可以向它添加新的東西鲸阻。

許多編程語(yǔ)言都使用了C風(fēng)格的格式化輸出者吁,所以讓我們嘗試一下:

#include <stdio.h>

int main()
{
    int age = 10;
    int height = 72;

    printf("I am %d years old.\n", age);
    printf("I am %d inches tall.\n", height);

    return 0;
}

寫完之后加派,執(zhí)行通常的make ex3命令來(lái)構(gòu)建并運(yùn)行它褂微。一定要確保你處理了所有的警告倒庵。

這個(gè)練習(xí)的代碼量很小陋守,但是信息量很大,所以讓我們逐行分析一下:

  • 首先你包含了另一個(gè)頭文件叫做stdio.h水评。這告訴了編譯器你要使用“標(biāo)準(zhǔn)的輸入/輸出函數(shù)”。它們之一就是printf之碗。
  • 然后你使用了一個(gè)叫age的變量并且將它設(shè)置為10。
  • 接著你使用了一個(gè)叫height的變量并且設(shè)置為72褪那。
  • 再然后你使用printf函數(shù)來(lái)打印這個(gè)星球上最高的十歲的人的年齡和高度。
  • printf中你會(huì)注意到你傳入了一個(gè)字符串友浸,這就是格式字符串,和其它語(yǔ)言中一樣收恢。
  • 在格式字符串之后,你傳入了一些變量伦意,它們應(yīng)該被printf“替換”進(jìn)格式字符串中。

這些語(yǔ)句的結(jié)果就是你用printf處理了一些變量驮肉,并且它會(huì)構(gòu)造出一個(gè)新的字符串,之后將它打印在終端上离钝。

你會(huì)看到什么

當(dāng)你做完上面的整個(gè)步驟,你應(yīng)該看到這些東西:

$ make ex3
cc -Wall -g    ex3.c   -o ex3
$ ./ex3
I am 10 years old.
I am 72 inches tall.
$

不久之后我會(huì)停下來(lái)讓你運(yùn)行make慧域,并且告訴你構(gòu)建過(guò)程是什么樣子的。所以請(qǐng)確保你正確得到了這些信息并且能正常執(zhí)行昔榴。

外部研究

在附加題一節(jié)我可能會(huì)讓你自己查找一些資料,并且弄明白它們论泛。這對(duì)于一個(gè)自我學(xué)習(xí)的程序員來(lái)說(shuō)相當(dāng)重要蛹屿。如果你一直在自己嘗試了解問(wèn)題之前去問(wèn)其它人,你永遠(yuǎn)都不會(huì)學(xué)到獨(dú)立解決問(wèn)題错负。這會(huì)讓你永遠(yuǎn)都不會(huì)在自己的技能上建立信心勇边,并且總是依賴別人去完成你的工作。

打破你這一習(xí)慣的方法就是強(qiáng)迫你自己先試著自己回答問(wèn)題粒褒,并且確認(rèn)你的回答是正確的。你可以通過(guò)打破一些事情奕坟,用實(shí)驗(yàn)驗(yàn)證可能的答案,以及自己進(jìn)行研究來(lái)完成它刃跛。

對(duì)于這個(gè)練習(xí),我想讓你上網(wǎng)搜索printf的所有格式化占位符和轉(zhuǎn)義序列桨昙。轉(zhuǎn)義序列類似\n或者\r,可以讓你分別打印新的一行或者 tab 蛙酪。格式化占位符類似%s或者%d,可以讓你打印字符串或整數(shù)滤否。找到所有的這些東西,以及如何修改它們藐俺,和可設(shè)置的“精度”和寬度的種類。

從現(xiàn)在開(kāi)始欲芹,這些任務(wù)會(huì)放到附加題里面,你應(yīng)該去完成它們菱父。

如何使它崩潰

嘗試下面的一些東西來(lái)使你的程序崩潰,在你的電腦上它們可能會(huì)崩潰浙宜,也可能不會(huì)。

  • 從第一個(gè)printf中去掉age并重新編譯同仆,你應(yīng)該會(huì)得到一大串的警告。
  • 運(yùn)行新的程序俗批,它會(huì)崩潰市怎,或者打印出奇怪的年齡。
  • printf恢復(fù)原樣区匠,并且去掉age的初值,將那一行改為int age;驰弄,之后重新構(gòu)建并運(yùn)行。
# edit ex3.c to break printf
$ make ex3
cc -Wall -g    ex3.c   -o ex3
ex3.c: In function 'main':
ex3.c:8: warning: too few arguments for format
ex3.c:5: warning: unused variable 'age'
$ ./ex3
I am -919092456 years old.
I am 72 inches tall.
# edit ex3.c again to fix printf, but don't init age
$ make ex3
cc -Wall -g    ex3.c   -o ex3
ex3.c: In function 'main':
ex3.c:8: warning: 'age' is used uninitialized in this function
$ ./ex3
I am 0 years old.
I am 72 inches tall.
$

附加題

  • 找到盡可能多的方法使ex3崩潰什乙。
  • 執(zhí)行man 3 printf來(lái)閱讀其它可用的'%'格式化占位符已球。如果你在其它語(yǔ)言中使用過(guò)它們辅愿,應(yīng)該看著非常熟悉(它們來(lái)源于printf)忆某。
  • ex3添加到你的Makefileall列表中。到目前為止弃舒,可以使用make clean all來(lái)構(gòu)建你所有的練習(xí)。
  • ex3添加到你的Makefileclean列表中聋呢。當(dāng)你需要的時(shí)候使用make clean可以刪除它。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末通铲,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子颅夺,更是在濱河造成了極大的恐慌,老刑警劉巖吧黄,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唆姐,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡厦酬,警方通過(guò)查閱死者的電腦和手機(jī)瘫想,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)减噪,“玉大人,你說(shuō)我怎么就攤上這事筹裕。” “怎么了朝卒?”我有些...
    開(kāi)封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵乐埠,是天一觀的道長(zhǎng)囚企。 經(jīng)常有香客問(wèn)我瑞眼,道長(zhǎng),這世上最難降的妖魔是什么伤疙? 我笑而不...
    開(kāi)封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮黍特,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘衅澈。我一直安慰自己,他們只是感情好今布,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布拭抬。 她就那樣靜靜地躺著,像睡著了一般造虎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上算凿,一...
    開(kāi)封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音婚夫,去河邊找鬼署鸡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛靴庆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播炉抒,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼焰薄!你這毒婦竟也來(lái)了入录?” 一聲冷哼從身側(cè)響起佳镜,我...
    開(kāi)封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蚀同,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蠢络,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡迟蜜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了髓霞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡方库,死狀恐怖障斋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情垃环,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布遂庄,位于F島的核電站,受9級(jí)特大地震影響涧团,放射性物質(zhì)發(fā)生泄漏经磅。R本人自食惡果不足惜泌绣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一阿迈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧苗沧,春花似錦刊棕、人聲如沸待逞。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至怜庸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間割疾,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工宏榕, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人麻昼。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像胚宦,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子燕垃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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