实验一修改(输入非数字死循环,输入小数点进入死循环)

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#define N 10 //题目数量
main()
{
clock_t start = clock();
char opChar;
double a,b,system;
double user,user1;
int op;
int i,rightType,wrongType;
int rightNumber=0;
int flag=0;
int ret;
srand(time(NULL));
do{
for(i=0;i<N;i++)
{
a=rand()%10+1;
b=rand()%10+1;
op=rand()%4+1;
rightType=rand()%4+1;
wrongType=rand()%4+1;
switch(op)
{
case 1:
opChar='+';
system=a+b;
break;
case 2:
opChar='-';
system=a-b;
break;
case 3:
opChar='*';
system=a*b;
break;
case 4:
opChar='/';
if(fabs(b)<=1e-7)
{
printf(" division by zero\n");
}
else{
user=(double)a/b;
}
break;
default:
printf("Unknown operator!");
}
printf("%.0lf %c %.0lf= ? \n",a,opChar,b);
ret=scanf("%lf",&user1);
if(ret!=1)
{
printf("输入错误,应输入数字\n");
while(getchar()!='\n');
printf("请重新输入\n");
scanf("%lf",&user1);
}
if(user1==system || user1==user)
{
switch(rightType)
{
case 1:
printf(" very good!\n");
break;
case 2:
printf(" excellent!\n");
break;
case 3:
printf(" nice work!\n");
break;
case 4:
printf(" keep up the good work!\n");
break;
default:
printf(" WrongType!");
}
rightNumber++;
}
else
{
printf(" wrong type!\n");
}

}
printf(" Total score is %d\n",rightNumber*N);
printf(" Rate of correnctness is %d %% \n",rightNumber*N);
if(rightNumber*N<75)
{
printf(" once again! \n");
rightNumber=0;
flag=1;
}
}while(flag);
clock_t finish = clock();
double duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf(" 总共用时:");
printf( " %f seconds\n", duration );
}

posted on 2015-04-01 16:01  10-董大为  阅读(135)  评论(1编辑  收藏  举报

导航