关于这个 while 死循环的问题
#include <stdio.h>
#include <string.h>
int main(void)
{
int aa;
while((scanf("%d",&aa))!=1)
{
puts("请重新输入!"); //为什么只执行这句?
if(scanf("%d",&aa)==1) //请问为什么这句不执行?
break;
}
return 0;
}
假设我输入1个: a[Enter]
为什么只执行:puts("请重新输入!"); ?
这个程序目的是为了校验 输入赋值变量aa,直到成功为其赋值为一个int值时。
[解决办法]
while((scanf("%d",&aa))!=1)
if(scanf("%d",&aa)==1) //请问为什么这句不执行?
你不觉得这两句本身就是一样的吗? 输入不合法进入循环, 然后不进入If。
正确做法是!=1,然后while(fgetc != EOF and '\n' );吃掉所有换行符前的垃圾字符.
[解决办法]
%d 跳过空白字符,那'a'总不是空白字符吧,'a'不会跳过,所以if()中的scanf也读了一次,读完之后发现没读到,于是继续循环
if(scanf("%d",&aa)==1) //请问为什么这句不执行?
只要你在这一句之前先清空缓存区,一定可以解决你的问题,睡觉了。
[解决办法]
你是这个意思吧,加个flushall(),清空非法输入的字符就行了。
#include <stdio.h>#include <string.h>int main(void){ int aa; while(true){ if(scanf("%d",&aa)==1) { break; } else { puts("请重新输入!"); flushall();//清空输入流,这个是关键 }} return 0;}