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

C語言 printf 格式化輸出完全手冊:轉換符、標誌、寬度、精度

     編輯:關於C語言

C語言 printf 格式化輸出完全手冊:轉換符、標誌、寬度、精度

printf 是 C 語言最常用也最強大的輸出函數。掌握其完整格式語法,能讓輸出對齊美觀、數值精確、調試高效。

一、完整格式語法


%[標誌][寬度][.精度][長度]轉換符

二、轉換符速查表

符號含義示例輸出
%d, %i有符號十進制整數42, -7
%u無符號十進制整數42
%o八進制整數52
%x, %X十六進制整數2a, 2A
%f, %F十進制浮點數3.141593
%e, %E科學計數法3.141593e+00
%g, %G%f/%e 自動選短者,去尾隨03.14159
%a, %A十六進制浮點數 (C99)0x1.921fb5p+1
%c單字符A
%s字符串hello
%p指針地址0x7ffe...
%n已輸出字符數寫入指針(無輸出)
%%輸出字面 %%

三、標誌字符

標誌含義示例
-左對齊(默認右對齊)%-10d → "42 "
+總顯示符號%+d → "+42", "-7"
空格正數前加空格,負數加-% d → " 42", "-7"
0寬度填充用0而非空格%05d → "00042"
#替代形式:0x/0X/0/.000%#x → "0x2a", %#f → "3.140000"

四、寬度與精度

  • 寬度 (m):最小輸出字符數,不足填充,超出不截斷
  • 精度 (.n):
    • 整數:最小位數,不足前補0
    • 浮點數:小數點後位數(%f)或有效數字(%g/%e)
    • 字符串:最大字符數,超出截斷
  • 可用 * 從參數動態獲取:printf("%*.*s", width, prec, str)

五、長度修飾符

修飾符適用類型示例
hhchar (signed/unsigned)%hhd
hshort%hd
llong, double%ld, %lf
lllong long%lld, %llu
Llong double%Lf
zsize_t%zu
tptrdiff_t%td
jintmax_t/uintmax_t%jd

六、實戰示例


int a = 16;
float b = 79.3f;

printf("[%4d]\n", a);      // [  16] 右對齊寬度4
printf("[%-4d]\n", a);     // [16  ] 左對齊
printf("[%10f]\n", b);     // [  79.300000] 寬度10
printf("[%.2f]\n", b);     // [79.30] 保留2位小數
printf("[%4.2f]\n", b);    // [79.30] 寬度4(不足不填)
printf("[%08.2f]\n", b);   // [00079.30] 0填充寬度8

// 輸出字面 %
printf("Progress: %d%%\n", 100);  // Progress: 100%

// %n 獲取已輸出長度
int len;
printf("Hello%n World\n", &len);  // len = 5

// 64位整數
long long big = 9223372036854775807LL;
printf("%lld\n", big);   // 9223372036854775807
printf("%016llx\n", big); // 7fffffffffffffff

七、單精度 vs 雙精度輸出

  • float:%f 足夠(默認提升為 double),有效數字 ~7 位
  • double:%f 或 %lf(scanf 需 %lf),有效數字 ~15-16 位
  • long double:%Lf

八、常見錯誤與避坑

  1. 格式符與參數類型不匹配:未定義行為,嚴重時崩潰
  2. 字符串未以 \0 結尾:%s 會越界讀取
  3. 緩衝區溢出:sprintf → 改用 snprintf
  4. %p 需 void* 參數:printf("%p", (void*)ptr)
  5. %n 是安全隱患:格式化字符串漏洞利用點,輸入不可控時禁用

九、scanf 格式化輸入對應關係

printfscanf備註
%d%dint*
%f%ffloat*
%lf%lfdouble* (printf 也可用 %f)
%s%schar* (跳過空白,遇空白停止)
%c%cchar* (不跳過空白)
%%[]掃描集合,如 %[^\n] 讀整行

十、總結

printf 格式字符串是一門「小語言」。熟練掌握 標誌/寬度/精度/長度/轉換符 五要素組合,能精確控制任何輸出格式。調試時善用 %p、%#x、%zd 等專業格式;生產代碼優先用 snprintf 保證安全。記住:格式符與參數類型必須嚴格匹配,這是 C 語言類型安全的最後一道防線。

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