笨辦法學C 練習3:格式化輸出

練習3:格式化輸出

原文:Exercise 3: Formatted Printing

譯者:飛龍

不要刪除Makefile,因為它可以幫你指出錯誤,以及當我們需要自動化處理一些事情時,可以向它添加新的東西。

許多編程語言都使用了C風格的格式化輸出,所以讓我們嘗試一下:

#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;
}

寫完之后,執行通常的make ex3命令來構建并運行它。一定要確保你處理了所有的警告。

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

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

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

你會看到什么

當你做完上面的整個步驟,你應該看到這些東西:

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

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

外部研究

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

打破你這一習慣的方法就是強迫你自己先試著自己回答問題,并且確認你的回答是正確的。你可以通過打破一些事情,用實驗驗證可能的答案,以及自己進行研究來完成它。

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

從現在開始,這些任務會放到附加題里面,你應該去完成它們。

如何使它崩潰

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

  • 從第一個printf中去掉age并重新編譯,你應該會得到一大串的警告。
  • 運行新的程序,它會崩潰,或者打印出奇怪的年齡。
  • printf恢復原樣,并且去掉age的初值,將那一行改為int age;,之后重新構建并運行。
# 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崩潰。
  • 執行man 3 printf來閱讀其它可用的'%'格式化占位符。如果你在其它語言中使用過它們,應該看著非常熟悉(它們來源于printf)。
  • ex3添加到你的Makefileall列表中。到目前為止,可以使用make clean all來構建你所有的練習。
  • ex3添加到你的Makefileclean列表中。當你需要的時候使用make clean可以刪除它。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容