13.17 我發現如果堅持檢查返回值以確保用戶輸入的是我期待的數值, 則 scanf() 的使用會安全很多, 但有的時候好像會陷入無限循環。

在 scanf() 轉換數字的時候, 它遇到的任何非數字字符都會終止轉換 並被保留在輸入流中。因此, 除非採用了其它的步驟, 那麼未預料到的 非數字輸入會不斷 ``阻塞" scanf(): scanf() 永遠都不能越過錯誤的非數字字 符而處理後邊的合法數字字符。如果用戶在數字格式的 scanf 如 %d 或 %f  中輸入字符 `x', 那麼提示後並用同樣的 scanf() 調用重試的代碼會立即遇到 同一個 'x'。

參見問題 12.18

參考資料: [ISO, Sec. 7.9.6.2]; [H&S, Sec. 15.8 pp. 357-64]。

翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)