在編寫 C 語言快速排序程式時,許多初學者會遇到輸入處理的棘手問題:使用 scanf 讀取數字後,緩衝區殘留的換行符會導致後續字符輸入(如 getchar() 或 gets())異常,程式跳過輸入直接運行,結果不符預期。
最簡單有效的方法是在 while 循環或連續輸入處理中加入 getchar(); 語句。這行代碼的作用是「吸收」鍵盤緩衝區中殘留的換行符(\n),讓後續輸入函數能正常讀取用戶輸入的字符。
while (condition) {
// 處理邏輯...
getchar(); // 關鍵:吸收換行符
}
scanf("%d", &num) 讀取整數時,會將數字存入變量,但鍵盤敲擊的「回車鍵」產生的換行符仍留在輸入緩衝區。下一次調用 getchar() 或 scanf("%c", &ch) 時,它們會直接讀取這個換行符,而不是等待用戶新輸入。
scanf 讀取非字符類型後,緊跟一個 getchar() 清理緩衝區。scanf(" %c", &ch)(注意 %c 前的空格),自動跳過空白字符(含換行符)。fgets() 讀取整行,再用 sscanf() 解析,更穩健。掌握這個小技巧,能讓你的 C 語言交互式程式輸入處理更加可靠,避免因緩衝區殘留字符導致的邏輯錯誤。