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

C 語言格式化輸入輸出(二):格式控制符完整對照表與場寬、精度、對齊控制

     編輯:關於C語言

前言

printf/scanf 族函數的靈魂在於**格式控制串**。本文系統整理 Turbo C 2.0 支援的所有格式字符、場寬/精度語法、長度修飾符、對齊控制,並給出常見組合實例,作為查閱手冊與避坑指南。

一、基礎格式字符對照表

格式字符輸出/輸入含義適用類型
%d / %i有符號十進制整數int, short
%u無符號十進制整數unsigned int
%f十進制浮點數 (固定小數點)float, double
%e / %E指數科學記數法float, double
%g / %G自動選擇 %f 或 %e (較短者)float, double
%s字符串 (以 '\0' 結尾)char*, char[]
%c單個字符char
%p指針地址 (十六進制)void*
%x / %X無符號十六進制 (小寫/大寫)unsigned
%o無符號八進制unsigned

二、場寬與精度控制

語法:%[標誌][場寬][.精度][長度]類型

1. 場寬 (最小字符數)

  • %3d:最寬 3,不足右對齊填空格。
  • %9.2f:總寬 9,含小數點 1 位、小數 2 位、整數 6 位,不足右對齊。
  • %8s:最寬 8,字符串右對齊。
  • **超寬不截斷**:數值/字符串實際長度超過場寬時,**按實際長度輸出**(浮點數整數部分超寬同理),唯獨浮點數小數部分超精度時**四捨五入截斷**。

2. 精度 (小數位數 / 最大字符數)

  • .2 在 %f/%e/%g 中指定小數位數。
  • .9 在 %s 中限制**最大輸出字符數**(超截斷)。
  • 組合 %6.9s:最小寬 6、最大寬 9,不足 6 右對齊,超 9 截尾。

3. 前導零填充

  • %04d:不足 4 位時**前補 0** 而非空格(負號佔 1 位)。

三、長度修飾符

修飾符含義典型搭配
l (ell)長整型 / 雙精度%ld (long), %lf (double)
h短整型%hd (short)
L長雙精度%Lf (long double)

注意:printf 中 %f 可接收 float/double (默認提升);scanf **必須**區分 %f (float*) 與 %lf (double*)。

四、對齊控制:標誌字符

標誌效果範例
-**左對齊** (默認右對齊)%-7d、%-10s
+正數顯示 + 號%+d
space正數前置空格 (負數顯示 -)% d
#替代形式:%#x 加 0x、%#o 加 0、%#f 強制小數點%#x
0數值右對齊時前補 0 (同 %04d)%04d

五、綜合實例速查

格式串輸入值輸出結果說明
%5d12" 12"寬 5 右對齊
%-5d12"12 "寬 5 左對齊
%05d12"00012"前補 0
%8.2f123.456" 123.46"寬 8、小數 2 位、四捨五入
%10.4s"HelloWorld"" Hello"寬 10、最多 4 字符、右對齊
%-10.4s"HelloWorld""Hello "寬 10、最多 4 字符、左對齊
%ld1234567890L"1234567890"long 整數
%p&var"0x7ffe..."指針地址

六、scanf 專屬細節

  • scanf **忽略格式串中非格式字符**(空白符除外),匹配時自動跳過輸入流空白符。
  • %[] 掃描集:%[abc] 僅讀 a/b/c,%[^\\n] 讀整行 (含空格)。
  • %*d 抑制賦值:讀取但不存入變量(用於跳過字段)。
  • 地址傳遞:scanf("%d", &x); 必須取址,否則未定義行為。

七、常見錯誤與修正

錯誤代碼問題修正
printf("%d", &x);傳地址而非值printf("%d", x);
scanf("%d", x);傳值而非地址scanf("%d", &x);
printf("%f", d); (d 為 double)雖可工作但不規範printf("%f", d); 或 %lf (C99+)
scanf("%f", &d); (d 為 double)**嚴重錯誤**:寫入 4 字節覆蓋 8 字節scanf("%lf", &d);
%s 無長度限制緩衝區溢出%19s (緩衝區 20 字節)

總結

格式控制串是 printf/scanf 的**領域特定語言 (DSL)**。熟記「類型字符、場寬.精度、長度修飾符、標誌字符」四大維度組合規則,配合 scanf 掃描集與抑制賦值,即可精準控制文本輸入輸出,避免緩衝區溢出、類型不匹配、對齊混亂等經典坑點。

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