主要纠正了,类型输入错误时候流的状态的恢复,不恢复程序无法正常运行。。cin.sync()之前没有接触过。。原来程序的地址
//2014-03-12-09.47
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
static int num=0;
void checkcin(istream&in,double a,double b, int n)
{
// while(!in) //条件可改写为cin.fail()
// {
cout<<"输入类型有错!请重新输入"<<endl;
cin.clear();
cin.sync();
switch(n)
{
case 1:cout<<a<<"+"<<b<<"=";break;
case 2:cout<<a<<"-"<<b<<"=";break;
case 3:cout<<a<<"X"<<b<<"=";break;
case 4:cout<<a<<"÷"<<b<<"=";break;
}
// }
}
void check(double a,double ans)
{
if(ans==a)
{
cout<<"对了。";
num++;
}
else
{
cout<<"错了。。";
cout<<"答案应该是:"<<a;
}
}
int main()
{
srand(time(0));
double ans;
cout<<"-------------------------------小学生算数练习哦---------------------------------"<<endl;
for(int i=1;i<=10;i++)
{
double a=rand()%10;
double b=rand()%10;
cout<<"第";
cout.width(2);
cout<<i<<"题:";
switch(rand()%4)
{
case 1: cout<<a<<"+"<<b<<"=";
cin>>ans;
while(!cin){checkcin(cin,a,b,1);cin>>ans;}
check(a+b,ans);
break;
case 2: cout<<a<<"-"<<b<<"=";
cin>>ans;
while(!cin){checkcin(cin,a,b,2);cin>>ans;}
check(a-b,ans);
break;
case 3: cout<<a<<"X"<<b<<"=";
cin>>ans;
while(!cin){checkcin(cin,a,b,3);cin>>ans;}
check(a*b,ans);
break;
default: while(0==b)b=rand()%10;//除数不能为零
cout<<a<<"÷"<<b<<"=";
cin>>ans;
while(!cin){checkcin(cin,a,b,4);cin>>ans;}
check(a/b,ans);
break;
}
cout<<endl;
}
cout<<"您最后回答对了"<<num<<"道题。。"<<endl;
return 0;
}