C语言scanf()问题。为什么我输入非数字,比如字母之类的会死循环???

如题所述

scanf叫做“格式化输入”函数,这个函数是“脆弱型”的输入处理,在遇到非法输入的时候,只会跳过,不会清理输入缓冲区,造成了你在while中这样做就是死循环,因为缓冲区一直有“已经输入的并且未清除的内容”。

解决办法很简单,在printf语句之前,清理一下缓冲区即可:

flushall();
printf(......);

追问

谢谢了,学到了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-01-25
不输入数字的话,返回0,m==0为真追问

不是下面还有一个m=scanf("%d",&falg)提醒再一次输入了吗,怎么直接跳过了这句直接打印的那句死循环了?我输入超范围数字是可以的,其他就不行了。不知道为什么。谢谢了

第2个回答  2017-01-25
在printf之前加入语句fflush(stdin);清除缓存区;
相似回答