printf 透過格式字串中的多個轉換規範,配合可變參數列表,一次呼叫即可輸出多種類型數據。
#include <stdio.h>
int main() {
int num = 65;
char ch = 'A';
// 1. 同時輸出:整數 + 空格 + 字元 + 換行
printf("整數: %d, 字元: %c, ASCII碼: %d\n", num, ch, ch);
// 輸出: 整數: 65, 字元: A, ASCII碼: 65
// 2. 格式化對齊表格
printf("%-10s | %5s | %5s\n", "字元", "十進制", "十六進制");
for (int i = 65; i <= 70; i++) {
printf("%-10c | %5d | 0x%02X\n", i, i, i);
}
return 0;
}
| 格式 | 說明 | 範例輸出 |
|---|---|---|
%c | 單一字元 (對應 int,取低 8 位) | A |
%d / %i | 有號十進制整數 | 65 |
%u | 無號十進制整數 | 65 |
%x / %X | 十六進制 (小寫/大寫) | 41 / 41 |
%o | 八進制 | 101 |
char c = 'Z';
int ascii = c; // 隱式轉換: char -> int (ASCII 值)
printf("'%c' = %d (0x%X)\n", c, ascii, ascii);
// 輸出: 'Z' = 90 (0x5A)
char str[] = "Hello";
printf("字串: %s\n", str); // %s 期望 char* (首元素位址)
printf("首字元: %c\n", *str); // 解參考首元素
printf("首字元地址: %p\n", (void*)str);
#include <wchar.h>
#include <locale.h>
setlocale(LC_ALL, ""); // 設定區域支援 UTF-8
wchar_t wc = L'中';
printf("寬字元: %lc, 碼點: U+%04X\n", wc, wc);
// 需終端機支援 Unicode 顯示
printf("%c", 300) → 只取低 8 位 (300 % 256 = 44),輸出 ','。嚴重時導致未定義行為 (如 %s 傳整數)。#include <stdio.h>,編譯器假設 printf 回傳 int,參數提升規則可能出錯。\n 時,標準輸出為行緩衝,需 fflush(stdout) 或 setbuf(stdout, NULL)。使用 printf("格式字串", 變數1, 變數2, ...),按順序對應 %d (整數)、%c (字元)、%s (字串) 等格式符,即可靈活輸出混合類型數據。善用寬度、精度、標誌實現漂亮對齊。