printf() 是 C 語言最常用的格式化輸出函數,其原型為:
int printf(const char *format, ...);
掌握轉換說明符、修飾符與標誌的組合使用,能精準控制輸出格式。以下整理三張核心參考表。
| 轉換說明符 | 輸出內容 |
|---|---|
| %a / %A | 浮點數、十六進制數字與 p-/P- 記數法 (C99) |
| %c | 單一字符 |
| %d / %i | 有號十進制整數 |
| %e / %E | 浮點數、e-/E- 記數法 |
| %f | 浮點數、十進制記數法 |
| %g / %G | 根據數值自動選擇 %f 或 %e/%E 格式 |
| %o | 無號八進制整數 |
| %p | 指標地址 |
| %s | 字符串 |
| %u | 無號十進制整數 |
| %x / %X | 無號十六進制整數 (小寫/大寫字母) |
| %% | 輸出百分號字符 |
| 修飾符 | 含義與示例 |
|---|---|
| 標志 | 五種標志 (-、+、空格、#、0),詳見表三 |
| digit(s) | 最小字段寬度。%4d 表示至少佔 4 字符 |
| .digit(s) | 精度。%5.2f 共 5 字符,小數點後 2 位 |
| h | short int / unsigned short。%hd, %hx |
| hh | signed char / unsigned char。%hhd |
| j | intmax_t / uintmax_t (C99)。%jd |
| l | long / unsigned long。%ld, %lu |
| ll | long long / unsigned long long (C99)。%lld |
| L | long double。%Lf |
| t | ptrdiff_t (C99)。%td |
| z | size_t (C99)。%zd |
| 標志 | 作用與示例 |
|---|---|
| - | 左對齊。%-20s |
| + | 正數顯示 + 號。%+6.2f |
| 空格 | 正數前加空格,負數顯示 -。% 6.2f (被 + 覆蓋) |
| # | 替代形式:%o 加前綴 0;%x/%X 加 0x/0X;浮點數強制顯示小數點;%g/%G 保留尾隨零。%#o |
| 0 | 數字格式用前導 0 填充。%08d (遇 - 標志或精度則忽略) |
%#10.3E:科學記數法,寬度 10,小數 3 位,大寫 E,強制小數點%-15s:字符串左對齊,最小寬度 15%08d:整數右對齊,不足 8 位前補 0%+06.2f:寬度 6,小數 2 位,正數帶 +,前導 0 填充格式字符串與參數數量、類型必須嚴格匹配,否則導致未定義行為。C99 新增的 %a、%j、%z、%t 等需編譯器支援。