目次
1. scanf 函式概觀
在學習 C 程式語言時,最常使用的資料輸入方法之一就是 scanf 函式。它就像程式的「聆聽者」,將使用者輸入的資料存入指定的變數中。
scanf 的基本語法
scanf("formatSpecifier", &variable);
此處的關鍵要素是「formatSpecifier」以及變數前的位元組運算子 (&)。格式指定子指明要輸入的資料類型,& 表示該變數的位址。遵循此規則,scanf 就能正確處理使用者的輸入。
int num;
scanf("%d", &num);
如此一來,scanf 為程式提供輸入,並使資料可供使用。
2. 常用的格式指定子
%d: 整數%f:float類型的浮點數%lf:double類型的雙精度浮點數%s: 字串(以空白字元結束)%c: 單一字元
double val;
scanf("%lf", &val);
3. 同時處理多筆輸入
int age;
float height;
scanf("%d %f", &age, &height);
printf("Age: %d, Height: %.2fn", age, height);
4. 輸入驗證與錯誤處理
int age;
printf("Please enter your age (0–120): ");
if (scanf("%d", &age) == 1 && age >= 0 && age <= 120) {
printf("The entered age is %d years.n", age);
} else {
printf("Invalid age.n");
}
5. 清除輸入串流
使用 scanf 時,可能會感覺「先前的輸入仍然存在」。這是因為換行字元(\n)等仍留在輸入串流中所致。
scanf("%*[^n]");
scanf("%*c");
這樣可以跳過輸入緩衝區中遺留的換行或其他字元。然而,在迴圈處理時應避免使用非標準的 fflush(stdin),而應採用上述方法以確保安全。
6. 常見陷阱與最佳實踐
- 格式指定子相符: 確保資料類型與指定子一致
- 字串長度注意: 使用
%s輸入時,需考慮緩衝區大小 - 清除串流: 避免留下換行字元
7. 進階用法 | 精緻的 scanf 技巧
char name[20];
printf("Please enter your name: ");
scanf("%19s", name); // buffer-safe measure
printf("Hello, %s!n", name);
總結
scanf 函式是 C 語言中基本的輸入方式。只要了解格式指定子、錯誤檢查與輸入串流的處理,就能安全地使用它。特別要留意遺留的輸入緩衝區以及緩衝區溢位問題。


