printf / scanf 格式字元速查表
| 格式 | 含義 | 對應型別 | 範例 |
%d, %i | 有號十進位整數 | int | printf("%d", -10); |
%u | 無號十進位整數 | unsigned int | printf("%u", 4000000000u); |
%ld | 有號長整數 | long | printf("%ld", 1234567890L); |
%lu | 無號長整數 | unsigned long | printf("%lu", 4000000000UL); |
%lld | 有號長長整數 | long long | printf("%lld", 1LL<<60); |
%f | 定點浮點數 | float, double | printf("%f", 3.14); |
%lf | 雙精度浮點數 | double (scanf 專用) | scanf("%lf", &d); |
%e, %E | 科學記號 | double | printf("%e", 1e3); |
%g, %G | 自動選 %f 或 %e | double | printf("%g", 0.0001); |
%c | 單一字元 | char | printf("%c", 'A'); |
%s | 字串 | char* | printf("%s", "Hello"); |
%p | 指標位址 | void* | printf("%p", ptr); |
%x, %X | 十六進位 | unsigned | printf("%X", 255); |
%o | 八進位 | unsigned | printf("%o", 63); |
長度修飾字元
h:short / unsigned short(%hd, %hu)
l:long / unsigned long(%ld, %lu)、double(%lf 仅 scanf)
ll:long long(%lld, %llu)
L:long double(%Lf, %Le)
寬度與精度控制
%5d // 最寬 5 位,右對齊,不足補空格
%05d // 最寬 5 位,不足補 0
%-5d // 左對齊
%10.2f // 總寬 10,小數 2 位,右對齊
%-10.2f // 左對齊
%8s // 字串最寬 8,右對齊
%.5s // 最多印 5 個字元
%6.9s // 至少 6 字元,最多 9 字元
scanf 專用細節
%lf 必須用於 double*,%f 用於 float*(printf 兩者通用 %f)。
%*d:讀取並丟棄一個整數(抑制賦值)。
%[^\n]:讀取整行(含空格),遇換行停止。
常見錯誤
printf("%d", long_var); → 未定義行為,必須 %ld。
scanf("%d", &float_var); → 記憶體破壞,需 %f。
- 忘記
& 導致段錯誤。