C语言循环的一点小问题

来源:百度知道 编辑:UC知道 时间:2024/06/07 03:12:39
大家看一下下边的程序:
while(1)
{
i++;
printf("The %dth guessing:",i);
scanf("%d",&num_guess);
if(num_guess>=0&&num_guess<100)
{
if(num_guess==num_random)
{
time2=time(NULL);
printf("\nCongratulation! The figure is %d !\n",num_random);
printf("You use %d seconds !\n\n",(time2-time1));
break;
}
else if(num_guess>num_random)
printf("Please guess more smaller!\n\n");
else if(num_guess<num_random)
printf("Please guess more bigger!\n\n");
}
else
{
printf("ERROR!!! Please input a number!!!\n\n");
continue;
}
}

这是一个片短,我的问题是这样的:在最后一个else中 有一个continue语句,就是说结束本次的循环,并从新开始下一次的循环,大家可能也能看出条件是,只要输入的不是0到99的数字 那么就会走到continue语句,可是在做完它以后,程序进入死循环, 并没有我想要的继续下一次循环

我是想可能的原因是num_guess 因为输入的是非

如果输入的是非0到99的数字,则应该没问题.如果是其他字符嘛......

因为scanf工作是从缓存区读数据的.所以第二次的时候会不让你输入,而是从缓存区抓你数据,清空缓存区即可:把下面这个加在scanf语句后面
fflush(stdin);

准确来说应该是不让输入其他字符而只能是数字
所以应该再加上一个条件
if(num_guess<'0' || num_guess>'9')
{
printf("ERROR!!! Please input a number!!!\n\n");
continue;
}

恩,对!是这个原因。。。要是能把完整程序给我就好判断了!~遗憾

我试了一下,程序应该没错我能运行。至于你的死循环我这也出现过,原因是我输入的是字符出现的。
num_guess确实留在内存不过每次循环都会叫你输入,只要有输入就会改变的,看看是不是你输入时输入了字符或没吧输入法没关闭。