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

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

原文:Exercise 3: Formatted Printing

譯者:飛龍

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

許多編程語言都使用了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命令來構(gòu)建并運(yùn)行它。一定要確保你處理了所有的警告。

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

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

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

你會看到什么

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

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

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

外部研究

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

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

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

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

如何使它崩潰

嘗試下面的一些東西來使你的程序崩潰,在你的電腦上它們可能會崩潰,也可能不會。

  • 從第一個printf中去掉age并重新編譯,你應(yīng)該會得到一大串的警告。
  • 運(yùn)行新的程序,它會崩潰,或者打印出奇怪的年齡。
  • 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來閱讀其它可用的'%'格式化占位符。如果你在其它語言中使用過它們,應(yīng)該看著非常熟悉(它們來源于printf)。
  • ex3添加到你的Makefileall列表中。到目前為止,可以使用make clean all來構(gòu)建你所有的練習(xí)。
  • ex3添加到你的Makefileclean列表中。當(dāng)你需要的時(shí)候使用make clean可以刪除它。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容