[編程] C 的 printf()

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

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

#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進制整數

我們再看看下面的例子︰

#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 width。field 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位。

我們再看多一個例子︰

#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是小數點後的準確位元。