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

C 語言 printf/scanf 格式字元完整速查表

     編輯:關於C語言

輸出格式字元 (printf 族)

格式說明對應型別範例輸出
%c單一字符char (int 提升)'A'
%d, %i有號十進位整數int-42
%u無號十進位整數unsigned int4294967295
%o八進位 (無號)unsigned int017
%x, %X十六進位 (小寫/大寫)unsigned intff / FF
%f, %F定點浮點數double (float 提升)3.141593
%e, %E科學記號 (指數)double3.141593e+00
%g, %G自動選 %f 或 %e (較短者)double3.14159
%s字串 (以 \0 結尾)char *"hello"
%p指標位址void *0x7ffee3a8
%%輸出字面 %—%

輸入格式字元 (scanf 族) 差異

  • %[]:掃描字符集合。%[^\n] 讀整行,%[0-9] 只讀數字。
  • %*d:抑制賦值,讀取並丟棄,不儲存對應變數。
  • %10s:寬度限制,最多讀 10 字符(含 \0 需預留空間)。
  • %hhd、%lld、%Lf:長度修飾子分別對應 signed char、long long、long double。

旗標 / 寬度 / 精度 / 長度修飾子

%[旗標][寬度][.精度][長度]格式字元

旗標:
-  : 左對齊 (預設右對齊)
+  : 強制顯示正負號
空格: 正數前加空格,負數顯示負號
#  : 替代形式 (八進位加 0, 十六進位加 0x, 浮點數強制顯示小數點)
0  : 數值右對齊時前導補 0 (而非空格)

寬度:最小欄位寬度,不足補空格/0
精度:.數字
  - 整數:最小位數,不足前導補 0
  - 浮點數:小數點後位數 (%f/%e) 或最大有效數字 (%g)
  - 字串:最大字符數

長度修飾子:
hh : signed char / unsigned char
h  : short / unsigned short
(無): int / unsigned int / double
l  : long / unsigned long / double (printf) / long double (scanf %Lf)
ll : long long / unsigned long long
L  : long double
j  : intmax_t / uintmax_t (C99)
z  : size_t / ssize_t (C99)
t  : ptrdiff_t (C99)

常見組合範例

printf("%+010d", 42);        // +000000042
printf("%-10s", "hi");       // "hi        "
printf("%.2f", 3.14159);     // 3.14
printf("%#x", 255);          // 0xff
printf("%*.*s", 10, 3, "hello"); // "       hel" (寬度10, 精度3)
scanf("%19[^\n]", buf);      // 讀一行最多19字符,留1給\0
scanf("%*d %d", &a, &b);     // 跳過第一個整數,讀第二個給 b

float/double 精度陷阱

  • float 約 7 位有效數字,double 約 15-16 位。
  • printf("%f", f) 會將 float 提升為 double,但精度仍受限於原 float 儲存精度。
  • 範例:float f = 1234567.123f; printf("%.6f", f); 可能輸出 1234567.125000(二進制無法精確表示)。

安全掃描建議

  1. **永遠給字串指定寬度**:scanf("%19s", buf) 防緩衝區溢位。
  2. **檢查回傳值**:scanf 回傳成功匹配數,若不等於預期參數數,輸入格式錯誤。
  3. **清理輸入緩衝區**:讀取字符前用 int c; while ((c=getchar())!='\n' && c!=EOF); 吃掉殘留換行。
  4. **優先使用 fgets + sscanf**:逐行讀取再解析,更健壯。

建議列印此表貼於工位,寫格式字串時隨時查閱,避免低級錯誤。

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