13.16 我用 scanf %d 讀取一個數字, 然後再用 gets() 讀取字符串, 但是 編譯器好像跳過了 gets() 調用!

scanf %d 不處理結尾的換行符。如果輸入的數字後邊緊接著一個換行符, 則換行 符會被 gets() 處理。

作為一個一般規則, 你不能混用 scanf() 和 gets(), 或任何其它的輸入例程的調用; scanf 對換行符的特殊處理幾乎一定會帶來問題。要麼就用 scanf() 處理所有的 輸入, 要麼乾脆不用。

參見問題 12.18 和 12.20

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

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