一道小題
程序用於猜數組中的數,全對就退出#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
int answer={1,3,5,2},i,j,guess,times,a,b;
a=b=0;
j=0;
times=0;
printf("please enter four number:");
while(a!=4)
{
scanf("%d",&guess);
if(guess<0) ------------------->這判斷字母時重新輸入(因我機子上輸入字母是 負)為什麼輸入了a就進入了死循環出不來呢?
{
printf("error!\n");
do
{
scanf("%d",&guess);
}while(guess<0);
}
for(i=0;i<4;i++)
{
if(answer==guess && i==j)
{
a++;
}
else if(answer==guess && i!=j)
b++;
}
j++;
if(j==4 && a!=4)
{
times++;
printf("answer is error:%dA%dB!please guess again!\n\n\n\n",a,b);
j=0;
a=0;
b=0;
}
}
printf("the answer is right! you used %d's times!\n",times);
}
这是因为你的输入流中是个字母但是你要输入的是数字,那么scanf()读到此处时,会设置出错状态errno并退出,同时你的那个字母仍然留在输入缓冲区中,下次循环到此处时,又把字母读入,设置出错,退出,如此就是死循环了……
其实你只需要判断if (scanf("%d", &guess) > 0,就可以说明输入正常了,因为在正常情况下scanf返回的是成功赋值的元素数目,否则返回EOF(-1). 还不是很懂..
如果像你说的那字母仍然在输入缓冲区中那么,if (scanf("%d", &guess) > 0
还是会在缓冲区中啊? 情况基本上是这样的当你的sacnf()函数调用错误后,以后的SCANF函数均不会执行,比如
int guess;
scanf("%d",&guess);
scanf("%d",&guess);
printf("%d",guess);
这种情况下,如果你的第一次调用输入函数错误后,以后的输入函数都不会再继续执行。
在你的程序反应更加明显,由于你的循环中最后要以a!=4来进行判定,由于输入函数无法执行,将会直接执行其它语句,而在FOR循环中你的要求是i<4时进行累加,所以最后循环出来时a已经累加至5,所以最终限入没有输入提示的死循环
调试环境GCC4.2.2-TDM a、b干什么用的?我为什么没看懂?
页:
[1]