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

printf 格式輸出完全手冊:從入門到精通

     編輯:關於C語言

基本語法

printf("格式控制字符串", 輸出項列表);

格式字符串由普通字符(原樣輸出)和格式說明符(以 % 開頭)組成。

核心格式說明符速查表

符號含義示例輸出
%d, %i有符號十進制整數88, -12
%ld長整型 (long)1234567890L
%lld長長整型 (long long)9223372036854775807
%u無符號十進制整數4294967295
%o八進制 (無前綴 0)17
%x, %X十六進制 (無前綴 0x,小寫/大寫)ff, FF
%f單/雙精度小數 (預設 6 位小數)123.456000
%e, %E科學計數法 (小寫/大寫 e)1.234560e+02
%g, %G自動選 %f 或 %e 中較短者123.456
%c單一字符A
%s字符串 (以 \0 結尾)Hello
%p指標地址 (十六進制)0x7ffeefbff5a0
%%輸出字面 % 符號%

旗標 - 修飾輸出格式

旗標作用
-左對齊 (預設右對齊)
+強制顯示正負號
空格正數前加空格,負數顯示負號
#替代形式:%#o 加 0 前綴,%#x 加 0x,%#f/%#e/%#g 強制顯示小數點
0右對齊時用 0 填充 (而非空格)

寬度與精度

%[旗標][寬度][.精度][長度]類型
// 示例
%10d      // 最寬 10 字符,右對齊
%-10d     // 最寬 10 字符,左對齊
%05d      // 寬 5,前導補 0
%5.2f     // 總寬 5,小數 2 位
%.3s      // 最多取字符串前 3 字符
%*d       // 寬度由參數指定 (int width, int val)
%.*f      // 精度由參數指定 (int prec, double val)

長度修飾符

修飾符對應類型
hhsigned char, unsigned char
hshort, unsigned short
llong, unsigned long, double (在 %f 中)
lllong long, unsigned long long
Llong double
zsize_t (C99)
tptrdiff_t (C99)
jintmax_t (C99)

實戰範例解析

int a = 15; char d = 'p';
float b = 123.1234567f;
double c = 12345678.1234567;

printf("a=%d, %5d, %o, %x\n", a, a, a, a);
// a=15,    15, 17, f

printf("b=%f, %lf, %5.4lf, %e\n", b, b, b, b);
// b=123.123457, 123.123457, 123.1235, 1.231235e+02

printf("d=%c, %8c\n", d, d);
// d=p,        p

printf("c=%lf, %f, %8.4lf\n", c, c, c);
// c=12345678.123457, 12345678.123457, 12345678.1235

常見坑點提醒

  • %f 通殺 float/double:因可變參數預設提升 float → double,%lf 在 printf 中等同 %f (但在 scanf 中必須用 %lf 讀 double)。
  • 參數個數/類型不匹配:屬未定義行為,嚴重時導致崩潰或輸出亂碼。
  • %s 需確保字符串以 \0 結尾,否則越界讀取。
  • 寬度/精度過大 可能導致緩衝區溢出,建議用 snprintf 限制長度。

進階:自定義輸出函數

利用 vprintf/vsnprintf 封裝日誌庫:

void Log(const char* fmt, ...) {
    va_list ap; va_start(ap, fmt);
    vprintf(fmt, ap);
    va_end(ap);
}

總結

掌握 printf 格式字符串,關鍵在於熟記類型對應、靈活運用旗標/寬度/精度、理解長度修飾符。建議將速查表存為備忘,實戰中多嘗試 %04d、%-10s、%.*f 等組合,自然得心應手。

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