printf是C語言中最常用的輸出函數,其強大的格式化能力往往被初學者忽視。本文系統梳理各類格式符用法,配合實例代碼與輸出結果,助你全面掌握格式化輸出技巧。
基本十進制輸出
printf("%d %d", 3, 4); // 輸出: 3 4
printf("%4d %4d", 3, 4); // 輸出: " 3 4" (寬度4,右對齊)
printf("%-4d %-4d", 3, 4); // 輸出: "3 4 " (寬度4,左對齊)
長整型與進制輸出
long a = 3, b = 4;
printf("%ld %ld", a, b); // 長整型輸出
printf("%8ld %8ld", a, b); // 寬度8右對齊
int val = -1;
printf("%d %o", val, val); // 十進制與八進制: -1 37777777777 (32位系統)
printf("%x %o %d", val, val, val); // 十六進制/八進制/十進制: ffffffff 37777777777 -1
unsigned int uval = 65535;
printf("%u %x %o", uval, uval, uval); // 無符號輸出: 65535 ffff 177777
char c = 'A';
printf("%c %d", c, c); // 字符與ASCII碼: A 65
char *str = "Hello";
printf("%s", str); // 字符串輸出: Hello
printf("%10s", str); // 寬度10右對齊: " Hello"
printf("%.3s", str); // 只輸出前3字符: Hel
printf("%-10.3s", str); // 寬度10左對齊輸出前3字符: "Hel "
基本浮點輸出(%f)
double x = 11111111.111, y = 22222222.222;
printf("%f", x + y); // 默認6位小數: 33333333.333000
printf("%.2f", x + y); // 保留2位小數: 33333333.33
printf("%10.2f", x + y); // 寬度10含小數點: " 33333333.33"
printf("%-10.2f", x + y); // 左對齊: "33333333.33 "
科學計數法(%e/%E)
double val = 123.456;
printf("%e", val); // 1.234560e+02
printf("%10.2e", val); // 寬度10保留2位: " 1.23e+02"
printf("%-10.2e", val); // 左對齊: "1.23e+02 "
通用格式(%g/%G)
自動選擇%f或%e中較短者,去除尾部零:
double a = 123.456, b = 1234567123.456;
printf("%g", a); // 123.456
printf("%g", b); // 1.23457e+09 (自動切換科學計數法)
輸出百分號
printf("進度: %d%%", 50); // 進度: 50%
常用轉義字符
| 轉義字符 | 含義 |
|---|---|
| \n | 換行 |
| \t | 水平製表符 |
| \\ | 反斜杠 |
| \" | 雙引號 |
| \r | 回車 |
int num = -1;
printf("十進制: %d\n", num); // -1
printf("八進制: %o\n", num); // 37777777777 (補碼形式)
printf("十六進制: %x\n", num); // ffffffff
printf("無符號: %u\n", num); // 4294967295 (32位系統)
%m.nf中m為總寬度(含小數點),n為小數位數hh(char)、h(short)、l(long/double)、ll(long long)-左對齊、+強制符號、空格正數前空格、#替代形式(如0x前綴)、0零填充#includeint main() { // 整數測試 printf("=== 整數格式 ===\n"); printf("%d %4d %-4d %04d\n", 42, 42, 42, 42); // 浮點數測試 printf("\n=== 浮點數格式 ===\n"); double pi = 3.1415926535; printf("%f %.2f %10.4f %-10.4f %e %g\n", pi, pi, pi, pi, pi, pi); // 字符串測試 printf("\n=== 字符串格式 ===\n"); char *msg = "Hello"; printf("%s %10s %.3s %-10.3s\n", msg, msg, msg, msg); // 進制測試 printf("\n=== 進制格式 ===\n"); int val = 255; printf("%d %o %x %X %#o %#x\n", val, val, val, val, val, val); return 0; }
掌握printf格式化輸出不僅能生成美觀的控制台輸出,更是調試程序、格式化文件輸出的基礎技能。建議收藏本文作為速查手冊,實踐中靈活組合各種格式選項以滿足不同輸出需求。
