在 Turbo C 中,printf 的格式字串結構為:
[旗標][輸出最小寬度][.精度][長度]類型
方括號內為可選項。以下逐項說明。
| 格式字元 | 意義 |
|---|---|
| d | 有號十進位整數(正數不輸出正號) |
| o | 無號八進位整數(不輸出前綴 0) |
| x | 無號十六進位整數(不輸出前綴 0x) |
| u | 無號十進位整數 |
| f | 單/雙精度實數以小數形式輸出 |
| e | 單/雙精度實數以指數形式輸出 |
| g | 以 %f 或 %e 中較短寬度輸出實數 |
| c | 單一字元 |
| s | 字串 |
| 旗標 | 意義 |
|---|---|
| - | 結果靠左對齊,右側填空格 |
| + | 輸出正負號(正數顯示 +) |
| 空格 | 正數前加空格,負數前加負號 |
| # | 對 o 增加前綴 0;對 x 增加 0x;對 e/g/f 強制顯示小數點 |
十進位整數指定最少輸出位數。實際位數超過寬度則按實際輸出;不足則預設靠右、左側補空格(若配合 0 則補 0)。
以 . 開頭後接整數。對數值表示小數位數;對字串表示最大輸出字元數;超出部分會被截斷。
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 空格。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(字元變數) 輸出單一字元,需 #include <stdio.h>。範例:
putchar('A'); // 輸出 A
putchar('\n'); // 換行
putchar(x); // 輸出變數 x 的字元值
scanf("格式控制字串", 地址表列) 從鍵盤按格式讀取資料至變數。關鍵點:
printf 類似,但不可包含非格式字元(提示字串)。& 取址運算子:&a, &b。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 先輸出提示訊息。