1.如果碰到循环需要输入的,最好把scanf()语句写在循环外面,防止一些不必要的小差错产生!
2.由scanf()非法输入字符造成的死循环及其解决方案
问题初析:
死循环和while语句本身没有关系,无论使用while,do-while,for,只要是循环体,均会产生此问题。程序在后续执行中直接跳过应该由用户输入的scanf()语句;
原理分析:
经多方查找资料得,scanf()有缓存区,当输入非法字符(要求的类型与输入的类型不符合),scanf()会直接跳过,该输入及不会被接受也不会被清除,被存放在scanf()的缓存区,当下次调用scanf()函数时,会直接从缓存区读取非法字符,造成死循环。
解决思路:
清除滞留在scanf()缓存区的数据,使下一次循环时scanf()可以正常的读取用户输入。
解决方法:
注意:getchar()是放在scanf()语句前面而非后面!!!
3.两张Mindmap: