C 的 printf()

C

在 C++ 編程上,我們可以使用 cout 將內容顯示出來;在 Java 編程上,我們可以使用 System.out.print() 將內容顯示出來;而在 C 編程上,我們則使用 printf() 將內容顯示出來。

在開始之前,讓我們看看一個簡單的例子︰

1
2
3
4
5
6
7
#include <stdio.h>

int main(void) {
    printf(This is a test\n);
    printf(%d - %d = $c\n, 12, 10, '2');
    return 0;
}

在上面的例子,我們可以看到第 4 行的 printf() 只是將一段純文字輸出,所以只有一個argument。

而在第 5 行的 printf() ,可以分成兩個部份理解。第一個 argument 是輸出字串的格式(format string),而後面是一連串的 arguments 。而在輸出字串的格式內會決定輸出的格式和後面 arguments 的數量。例如上面例子中的輸出字串格式內有3個格式規範符號(format specifier),決定了後面會有 3 個 arguments。

規範符號是由一個 % 符號加上一個轉換字符(conversion character)組成,例如 %d。以下是常用的規範符號︰

規範符號 意義
%c 輸出字元 char
%d 輸出10進制整數
%e / %E 輸出使用科學符號的浮點數。例如3.2154e+2和3.2154E+2
%f 輸出浮點數
%g / %G 在$e, %E和%f中選擇比較準確的一個再輸出浮點數
%o 輸出8進制整數
%s 輸出字串 string
%u 輸出Unsigned的10進制整數
%x / %X 輸出16進制整數

我們再看看下面的例子︰

1
2
3
4
5
6
7
#include <stdio.h>

int main(void) {
    printf(%c%3d%5c\n, 'L', 9, 'U');
    printf(%.1f + %.2f = %.3f\n, 1.0, 2.0, 3.0);
    return 0;
}

當 argument 輸出時,輸出的位置是 field 。而輸出未元的數量稱為 field widthfield width 是在 % 和轉換字符中的數字。例如第 5 行的輸出是︰

+-+-+-+-+-+-+-+-+-+
|L| | |3| | | | |U|
+-+-+-+-+-+-+-+-+-+

我們可以看到第 3 個 argument 的長度是 3 ,而 9 就顯示在最右邊的第 3 個位置。同樣道理,第 4 個 argument 的長度是 5,而 U就顯示在 5 格內的最右邊一格。

我們再看看第 5 行的 printf() 。輸出是︰

1.0 + 2.00 = 3.000

我們可以看到 %.3f 即是將浮點數準備至限數點後 3 位。

我們再看多一個例子︰

1
2
3
4
5
6
#include <stdio.h>

int main(void) {
    printf(%6.1f + %6.2f = %6.3f\n, 1.1, 2.2, 3.3);
    return 0;
}

輸出的結果是︰

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | | |1|.|1| | |2|.|2|0| |3|.|3|0|0|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

由此可見,格式「%a.bf」內的 a 是字元的數目,而b是小數點後的準確位元。

Made in Hong Kong