%-10d 與 %10d 格式化輸出詳解:對齊、寬度、填充一次搞懂%[flags][width][.precision][length]specifierprintf 格式字串中,d 代表**有號十進位整數**。10 是**最小欄位寬度**,- 是**標誌**,表示**左對齊**(預設右對齊)。
int num = 123;
printf("|%10d|\n", num); // 輸出:| 123| (右對齊,左邊補 7 個空格)
printf("|%-10d|\n", num); // 輸出:|123 | (左對齊,右邊補 7 個空格)
欄位寬度 10,數字佔 3 字元,剩餘 7 字元用空格填充。
| 旗標 | 含義 | 適用轉換 |
|---|---|---|
- | 結果左對齊(預設右對齊) | 所有 |
+ | 有號數值必須顯示正負號(+123, -123) | 有號數值 |
(空格) | 正數前加空格,負數顯示負號(與 + 互斥) | 有號數值 |
0 | 左側補 0 而非空格(若同時給 - 則忽略 0) | 數值 |
# | 替代形式:o 加前綴 0,x/X 加 0x/0X,f/F/e/E/g/G 強制顯示小數點 | 數值 |
%10d:最小寬度 10,數字位數超過 10 時**自動擴展**,不會截斷。%.5d:精度 5,數字位數不足 5 時**左側補 0**(123 → 00123),不影響符號。%10.5d:寬度 10,精度 5,先按精度補 0 再按寬度對齊填充空格。%*d:寬度由引數指定(printf("%*d", 10, 123) 等同 printf("%10d", 123))。- 位於寬度之前: %10-d 是錯誤語法,編譯器會警告或視為 %10 + -d(無效)。0 旗標能配合左對齊: %-010d 中 0 被忽略,仍用空格填充。%10s/%-10s: 同理,%10s 右對齊,%-10s 左對齊。C 標準庫僅支援空格或 0 填充。若需填充 *、. 等字元,需自行計算長度後用 printf("%*s", width, "") 配合字串操作,或自寫格式化函數。
總結: %10d 右對齊、%-10d 左對齊,寬度不足補空格,寬度不足數字位數時自動擴展。熟練掌握旗標、寬度、精度組合,能輕鬆產出整齊的表格、報表、日誌輸出。