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)