问题:
我发现如果坚持检查返回值以确保用户输入的是我期待的数值, 则 scanf() 的使用会安全很多, 但有的时候好像会陷入无限循环。
在scanf() 转换数字的时候, 它遇到的任何非数字字符都会终止转换并被保留在输入流中。
因此, 除非采用了其它的步骤, 那么未预料到的非数字输入会不断 “阻塞” scanf(): scanf() 永远都不能越过错误的非数字字符而处理后边的合法数字字符。
如果用户在数字格式的scanf 如%d 或%f 中输入字符‘x’, 那么提示后并用同样的scanf() 调用重试的代码会立即遇到同一个’x’。