所以我正在尝试制作一个程序,它将生成随机的基本数学问题,如加法、减法等。
当我试图生成除法问题时,我做了一个do-wile循环,一直运行到满足除法问题的先决条件。
但出于某种原因,当我要求它生成20个除法问题,而没有剩余的问题时,它总是崩溃。
请帮助
这是代码
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int correct,total,MAXVAL;
const char oper[4]={'/','/','/','/'};
typedef struct data{
int first,second;
char operation;
}data;
data datagenerator(){
data newData;
newData.first= (rand()%MAXVAL);
newData.operation=oper[rand()%4];
newData.second=(rand()%MAXVAL);
return newData;
}
bool corrector(data newData){
bool isture=false;
switch(newData.operation){
case '/':
if((newData.first%newData.second)==0){
isture=true;
}
break;
case '*':
isture=true;
break;
case '+':
isture=true;
break;
case '-':
isture=true;
break;
}
return isture;
}
void quizer(){
system("CLS");
for(int counter=1;counter<=total;counter++){
cout<<"Q"<<counter<<": ";
data newData;
do{
newData=datagenerator();
}while(!corrector(newData));
cout<<newData.first<<newData.operation<<newData.second<<"n";
}
cout<<"nYou got "<<correct<<"/"<<total<<"correctn";
}
int main(){
//srand((unsigned)time(0));
char x;
cout<<"How many questions do you want?"<<endl;
cin>>total;
cout<<"Enter the maximum valuen";
cin>>MAXVAL;
cout<<"Are you ready?n";
cin>>x;
quizer();
system("PAUSE");
return 0;
}
您需要检查是否被0除。
bool corrector(data newData){
bool isture=false;
switch(newData.operation){
case '/':
if(newData.second == 0) {
break;
}
if((newData.first%newData.second)==0){
isture=true;
}
...
您生成一个0作为第二个数字,然后尝试用它除以一个数字。
你可以放一张像这样的支票
if(newData.second == 0) {
return false;
}
您的问题就在第17行和第19行。假设MAXVAL要求您将其值设置为0,则您将除以0。对于模除法,你需要小心。