1. scanf
函式是什麼?
在學習 C 語言的過程中,scanf
函式是常用來從使用者那裡取得輸入資料的方法。它的角色就像是程式的「傾聽者」,可以把使用者輸入的資料儲存到指定的變數中。
scanf
的基本語法
scanf("格式指定子", &變數);
這裡的重點是「格式指定子」和變數前面的 &
。格式指定子用來指定輸入資料的型別,而 &
則是指定變數的記憶體位址。只要遵守這個簡單的規則,scanf
就能在程式中正確處理使用者的輸入。
例如,要讀取一個整數,可以這樣寫:
int num;
scanf("%d", &num);
透過這種方式,程式能夠取得輸入並加以使用。scanf
就是 C 語言中處理資料輸入的可靠幫手。

2. 基本用法
scanf
函式的基本用法是「依照格式指定子,將輸入值存入對應變數」。這個格式可以用來指定輸入值的型別,例如整數、浮點數或字元。
整數的輸入
int num;
scanf("%d", &num);
%d
是用來輸入整數的格式指定子。使用者輸入 10,變數 num
就會被設為 10。
浮點數的輸入
float pi;
scanf("%f", &pi);
%f
是用來輸入浮點數的格式指定子。輸入 3.14,就能將其儲存在 pi
這個變數中。
字元的輸入
char ch;
scanf(" %c", &ch);
輸入單一字元時要注意:格式指定子 " %c"
前面加了一個空白。這是為了跳過前面的換行符號(例如按下 Enter 時產生的 \n
),避免讀到錯誤的資料。
3. 同時輸入多個值
scanf
函式可以一次讀取多個值,只要在格式指定子中依序寫上對應的格式,並提供相對應的變數即可。
範例:兩個整數的輸入
int a, b;
scanf("%d %d", &a, &b);
這段程式碼會等待使用者依序輸入兩個整數(以空格或 Enter 分隔)。例如,輸入「10 20」時,a
就會是 10,b
就會是 20。
不同型別的同時輸入
int id;
float score;
scanf("%d %f", &id, &score);
這段程式碼會依序讀取一個整數與一個浮點數。例如輸入「101 98.5」,id
為 101,score
為 98.5。透過這種方式,可以更有效率地從使用者那裡取得多筆資料。
4. 格式指定子一覽與說明
scanf
使用格式指定子來判斷輸入值的型別。以下是常用的格式指定子與對應的變數型別:
格式指定子 | 說明 | 對應的變數型別 |
---|---|---|
%d | 輸入十進位整數 | int |
%f | 輸入浮點數 | float |
%lf | 輸入雙精度浮點數 | double |
%c | 輸入單一字元 | char |
%s | 輸入字串(不含空格) | char[] |
根據輸入的資料型別,請務必使用正確的格式指定子。否則可能導致未定義的行為或程式錯誤。
5. scanf
的錯誤處理
scanf
雖然使用方便,但如果輸入資料不正確,可能會導致錯誤或程式無法如預期執行。因此,進行輸入時的錯誤處理是很重要的。
回傳值的活用
scanf
的回傳值是「成功讀取的項目數」。如果期望讀取兩個整數,但使用者只輸入了一個,那麼回傳值會是 1。
int a, b;
int result = scanf("%d %d", &a, &b);
if (result != 2) {
printf("輸入格式錯誤,請重新輸入。\n");
}
透過檢查回傳值,可以有效避免錯誤資料造成的問題,提升程式的穩定性。
清除輸入緩衝區
若輸入錯誤或需要重新輸入時,建議清除輸入緩衝區(也就是還沒被讀取的輸入資料),否則可能會殘留錯誤資料影響下一次輸入。常見的清除方法之一是使用下列程式碼:
int ch;
while ((ch = getchar()) != '\n' && ch != EOF);
這段程式碼會讀取並丟棄直到換行為止的所有字元,有助於確保輸入乾淨。
6. 應用技巧與注意事項
掌握 scanf
的基本用法後,也可以進一步學習一些實用的應用技巧和常見的陷阱,讓程式變得更穩定、更安全。
讀取多字元字串
scanf("%s", str);
雖然可以讀取字串,但遇到空白(如空格或換行)就會結束輸入。如果要讀取包含空格的字串,建議使用 fgets
函式。
char str[100];
fgets(str, sizeof(str), stdin);
限制輸入長度
使用 %Ns
的方式可以限制字串的輸入長度,避免發生緩衝區溢位(Buffer Overflow)問題。
char name[10];
scanf("%9s", name);
這樣可以限制最多讀取 9 個字元(加上結尾的 \0
),提高安全性。
避免緩衝區殘留
輸入字元時,如果沒有加上空格(如 " %c"
),可能會讀到殘留的換行符號。這是初學者常犯的錯誤之一,請特別注意。
7. 總結
scanf
是 C 語言中處理使用者輸入的重要工具。只要掌握基本語法、格式指定子的使用方法,以及常見錯誤的處理技巧,就能靈活且安全地讀取輸入資料。
本篇文章介紹了 scanf
的基本用法、多重輸入、錯誤處理、緩衝區清除、以及進階技巧等,對於初學者建立穩固的輸入基礎相當有幫助。今後在寫程式時,請善用這些知識,讓你的 C 語言更上層樓!