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

C語言格式化輸出與輸入詳解:printf/scanf 格式字串、旗標、寬度、精度完全指南

     編輯:關於C語言

printf 格式字串完整語法

在 Turbo C 中,printf 的格式字串結構為:

[旗標][輸出最小寬度][.精度][長度]類型

方括號內為可選項。以下逐項說明。

1. 類型字元

格式字元意義
d有號十進位整數(正數不輸出正號)
o無號八進位整數(不輸出前綴 0)
x無號十六進位整數(不輸出前綴 0x)
u無號十進位整數
f單/雙精度實數以小數形式輸出
e單/雙精度實數以指數形式輸出
g以 %f 或 %e 中較短寬度輸出實數
c單一字元
s字串

2. 旗標字元

旗標意義
-結果靠左對齊,右側填空格
+輸出正負號(正數顯示 +)
空格正數前加空格,負數前加負號
#對 o 增加前綴 0;對 x 增加 0x;對 e/g/f 強制顯示小數點

3. 輸出最小寬度

十進位整數指定最少輸出位數。實際位數超過寬度則按實際輸出;不足則預設靠右、左側補空格(若配合 0 則補 0)。

4. 精度

以 . 開頭後接整數。對數值表示小數位數;對字串表示最大輸出字元數;超出部分會被截斷。

5. 長度修飾符

  • h:短整型(short int)
  • l:長整型(long int)或雙精度(double)

實戰範例解析

void main() {
    int a = 15;
    float b = 138.3576278;
    double c = 35648256.3645687;
    char d = 'p';

    printf("a=%d,%5d,%o,%x\n", a, a, a, a);
    printf("b=%f,%lf,%5.4lf,%e\n", b, b, b, b);
    printf("c=%lf,%f,%8.4lf\n", c, c, c);
    printf("d=%c,%8c\n", d, d);
}
  • %5d:寬度 5,a=15 僅 2 位 → 前補 3 空格。
  • %f 與 %lf 輸出相同,l 對 f 無影響。
  • %5.4lf:寬度 5、精度 4,實際長度超過 5 → 按實際位數輸出,小數點後超過 4 位被截斷。
  • %8c:寬度 8,字元前補 7 空格。

printf 參數求值順序陷阱

Turbo C 採用自右向左求值,但輸出順序仍為左至右。範例:

int i = 8;
printf("%d\n%d\n%d\n%d\n%d\n%d\n", ++i, --i, i--, i++, -i--);

求值順序:-i-- → i++ → i-- → --i → ++i,最終輸出順序仍為格式字串順序,導致結果與多行 printf 不同。建議:避免在同一 printf 中對同一變數做副作用操作。

字元輸出函數 putchar

putchar(字元變數) 輸出單一字元,需 #include <stdio.h>。範例:

putchar('A');      // 輸出 A
putchar('\n');     // 換行
putchar(x);        // 輸出變數 x 的字元值

格式化輸入 scanf

scanf("格式控制字串", 地址表列) 從鍵盤按格式讀取資料至變數。關鍵點:

  • 格式字串與 printf 類似,但不可包含非格式字元(提示字串)。
  • 地址表列需用 & 取址運算子:&a, &b。
  • 輸入資料間需以空白、Tab 或換行分隔。
int a, b, c;
printf("input a,b,c\n");
scanf("%d%d%d", &a, &b, &c);
printf("a=%d,b=%d,c=%d", a, b, c);

注意:scanf 不會顯示提示,實務上常搭配 printf 先輸出提示訊息。

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