首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C 語言 printf 格式輸出中的「寬度」與「精度」完全指南

     編輯:C 語言問答

核心概念:格式化輸出佔位符語法

%[標誌][寬度][.精度]長度類型
// 例:%-10.2f
//  - : 標誌 (左對齊)
// 10 : 寬度 (最小輸出字元寬度)
// .2 : 精度 (小數點後位數 / 字串最大長度)
//  f : 類型 (float/double)

「實際寬度」與「指定寬度」的關係

題目所問「數據的實際寬度」指數據轉換為字串後實際佔用的字元數 (不含結尾 \0)。

規則總結

情況行為範例 (寬度 5)
實際寬度 < 指定寬度預設右對齊,左側補空格printf("%5d", 99) → " 99" (3空格+99)
實際寬度 = 指定寬度正常輸出,無填充printf("%5d", 12345) → "12345"
實際寬度 > 指定寬度忽略寬度限制,按實際寬度完整輸出 (不會截斷)printf("%5d", 123456) → "123456"

常見格式化場景實戰

1. 整數對齊表格

printf("ID: %5d | Score: %3d\n", 101, 95);  // 右對齊
printf("ID: %-5d | Score: %-3d\n", 101, 95); // 左對齊 (加 - 標誌)

2. 浮點數精度控制

double pi = 3.1415926535;
printf("%.2f\n", pi);  // 3.14 (四捨五入)
printf("%10.4f\n", pi); // 寬度10,精度4 → "   3.1416"

3. 字串截斷與對齊

char *s = "HelloWorld";
printf("%.5s\n", s);    // Hello (精度限制最大長度)
printf("%15.5s\n", s);  // 右對齊寬度15,僅顯示前5字元
printf("%-15.5s\n", s); // 左對齊

進階標誌字元

  • -:左對齊 (預設右對齊)。
  • +:有號數值強制顯示正負號 (如 +95, -5)。
  • 空格:正數前加空格,負數加負號 (對齊正負號位)。
  • #:替代形式 (%#x 輸出 0x..., %#o 輸出 0..., %#f 強制顯示小數點)。
  • 0:數值右對齊時,左側補 0 而非空格 (如 %05d → 00099)。注意:若同時有 - 或精度 (整數),0 標誌被忽略。

長度修飾符 (關鍵)

修飾符對應類型範例
hhsigned char / unsigned char%hhd, %hhu
hshort / unsigned short%hd, %hu
l (ell)long / unsigned long / double (scanf)%ld, %lu, %lf
lllong long / unsigned long long%lld, %llu
Llong double%Lf
zsize_t%zu
tptrdiff_t%td

常見錯誤避坑

  1. %lf 在 printf 中:C99 標準允許 printf("%lf", d) (等同 %f),但舊標準僅 scanf 需 %lf,printf 用 %f 更通用。
  2. 寬度用 * 動態指定:printf("%*d", width, val); 寬度由引數傳入。
  3. 精度用 * 動態指定:printf("%.*s", max_len, str);。

總結

「實際寬度」是數據的固有屬性,「指定寬度」是格式化輸出的最小保證。掌握 寬度.精度 與 標誌 的組合,能輕鬆實現完美對齊的控制檯報表與日誌輸出。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved