0

そこで、足し算、引き算などの基本的な数学の問題をランダムに生成するプログラムを作成しようとしています。

除算の質問を生成しようとしているときに、除算の質問の前提条件が満たされるまで実行される do-while ループを作成しました。

しかし、なんらかの理由で、残りなしで 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<<"correct\n";
}


int main(){
    //srand((unsigned)time(0));
    char x;
    cout<<"How many questions do you want?"<<endl;
    cin>>total;
    cout<<"Enter the maximum value\n";
    cin>>MAXVAL;
    cout<<"Are you ready?\n";
    cin>>x;
    quizer();

    system("PAUSE");
    return 0;
}
4

3 に答える 3

3

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;
        }
...
于 2012-07-13T03:24:08.590 に答える
1

2番目の数値として0を生成し、それを使用して数値で除算しようとしています。

このようなチェックを入れることができます

if(newData.second == 0) {
            return false;
        }
于 2012-07-13T03:22:34.340 に答える
0

問題は17行目と19行目にあります。MAXVALの値を要求されたときに0に設定していると仮定すると、0で除算しています。モジュロ除算では、それに注意する必要があります。

于 2012-07-13T03:26:05.167 に答える