C語言知識彙總 | 09-輸出各種型別變數的數據

2020-08-11 20:49:52

在《03-第一個C語言程式》一節中,我們使用 puts 來輸出字串。puts 是 output string 的縮寫,只能用來輸出字串,不能輸出整數、小數、字元等,我們需要用另外一個函數,那就是 printf。

printf 比 puts 更加強大,不僅可以輸出字串,還可以輸出整數、小數、單個字元等,並且輸出格式也可以自己定義,例如:

  • 以十進制、八進制、十六進制形式輸出;
  • 要求輸出的數位佔 n 個字元的位置;
  • 控制小數的位數。

printf 是 print format 的縮寫,意思是「格式化列印」。這裏所謂的「列印」就是在螢幕上顯示內容,與「輸出」的含義相同,所以一般稱 printf 是用來格式化輸出的

先來看一個簡單的例子:

printf("neutionwei");

這個語句可以在螢幕上顯示「neutionwei」,與 puts("neutionwei");的效果類似。

輸出變數 abc 的值:

int abc = 999;
printf("%d", abc);

先來看 %dd 是 decimal 的縮寫,意思是十進制數,%d 表示以十進制整數的形式輸出。輸出什麼呢?輸出變數 abc 的值。%d 與 abc 是對應的,也就是說,會用 abc 的值來替換 %d。

再來看個複雜點的例子:

int abc = 999;
printf("The value of abc is %d !", abc);

這會在螢幕上顯示:

The value of abc is 999 !

字串 "The value of abc is %d !" 中的 %d 被替換成了 abc 的值,其他字元沒有改變。這說明 %d 比較特殊,不會原樣輸出,會被替換成對應的變數的值。

再來看:

int a = 100;
int b = 200;
int c = 300;
printf("a=%d, b=%d, c=%d", a, b, c);

這會在螢幕上顯示:

a=100, b=200, c=300

再次證明了 %d 與後面的變數是一一對應的,第一個 %d 對應第一個變數,第二個 %d 對應第二個變數……

%d稱爲格式控制符,它指明瞭以何種形式輸出數據。格式控制符均以 %開頭,其後跟其他字元。%d 表示以十進制形式輸出一個整數。除了 %d,printf 支援更多的格式控制,例如:

  • %c:輸出一個字元。c 是 character 的簡寫;
  • %s:輸出一個字串。s 是 string 的簡寫;
  • %f:輸出一個小數。f 是 float 的簡寫。

除了這些,printf 支援更加複雜和優美的輸出格式。

把程式碼補充完整,體驗一下:

#include <stdio.h>

int main()
{
    int n = 100;
    char c = '@'; // 注意:字元用單引號包圍,字串用雙引號包圍
    float money = 93.96;
    printf("n=%d, c=%c, money=%f\n", n, c, money);

    return 0;
}

輸出結果:

n=100, c=@, money=93.959999

要點提示:

(1)\n是一個整體,組合在一起表示一個換行字元。換行符是 ASCII 編碼中的一個控制字元,無法在鍵盤上直接輸入,只能用這種特殊的方法表示,被稱爲跳脫字元

所謂換行,就是讓文字從下一行的開頭輸出,相當於在編輯 Word 或者 TXT 文件時按下回車鍵。

puts 輸出完成後會自動換行,而 printf 不會,要自己新增換行符,這是 puts 和 printf 在輸出字串時的一個區別。

(2)//後面的爲註釋。註釋用來說明程式碼是什麼意思,起到提示的作用,可以幫助我們理解程式碼。註釋雖然也是程式碼的一部分,但是它並不會給程式帶來任何影響,編譯器在編譯階段會忽略註釋的內容,或者說刪除註釋的內容。

(3)money 的輸出值並不是 93.96,而是一個非常接近的值,這與小數本身的儲存機制 機製有關,這種機制 機製導致很多小數不能被精確地表示,即使像 93.96 這種簡單的小數也不行。
我們也可以不用變數,將數據直接輸出:

#include <stdio.h>

int main()
{
    float money = 93.96;
    printf("n=%d, c=%c, money=%f\n", 100, '@', money);

    return 0;
}

輸出結果與上面相同。

在以後的程式設計中,會經常使用 printf,因此說它是C語言中使用頻率最高的一個函數一點也不爲過。