小学生算术能力测试系统(改进)

主要纠正了,类型输入错误时候流的状态的恢复,不恢复程序无法正常运行。。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;

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值