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)