C++ Math Game

I have to create a math game that generates random number problems after the user chooses a function. Unless the users selects to exit, the program should tell the user if the answer is right or wrong and then go back to main menu. What I have works except that it is not returning to the main menu after a problem. Any help would be appreciated. Here is my code:

#include <iostream>
#include <cstdlib>
#include <time.h>

using namespace std;

int main()
{
int choice;
int v1;
int v2;
int ans;
int total;


srand(time(0)); // initialize random seed to current time
v1 = rand() % 100; // v1 in the range 0 to 99
v2 = rand() % 100 + 1; // v2 in the range 1 to 100

do
{
cout << "-- Menu --" << endl;
cout << "1: Add" << endl;
cout << "2: Subtract" << endl;
cout << "3: Multiply" << endl;
cout << "4: Divide" << endl;
cout << "0: Exit" << endl;
cout << "-- enter your choice: ";
cin >> choice;

// code for handling the entered choice...



//switch statements

switch (choice)
{
case 1:
cout <<"What is"<< v1 <<"+" << v2 <<"?";
cin >>ans;
total=v1+v2;

if (ans == v1 + v2) {
cout << "Correct answer" << endl;
}
else {
cout << "Wrong answer, please try again" << endl;
}
return 1;



case 2:
cout <<"What is"<< v1 <<"-" << v2 <<"?";
cin >>ans;
total=v1-v2;

if (ans == v1 - v2) {
cout << "Correct answer" << endl;
}
else {
cout << "Wrong answer, please try again" << endl;
}
return 1;


case 3:
cout <<"What is"<< v1 <<"*" << v2 <<"?";
cin >>ans;
total=v1*v2;

if (ans == v1 * v2) {
cout << "Correct answer" << endl;
}
else {
cout << "Wrong answer, please try again" << endl;
}
return 1;


case 4:
cout <<"What is"<< v1 <<"/" << v2 <<"?";
cin >>ans;
total=v1/v2;

if (ans == v1 / v2) {
cout << "Correct answer" << endl;
}
else {
cout << "Wrong answer, please try again" << endl;
}
return 1;



default:
cout << "you chose to exit" << endl;
}
} while (choice !=0);



return 0;
}

Could you please put [code] tags around your code and indent it so I can read it?
Division is a little screwy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <ctime>
using namespace std;

void addition(double n1,double n2);
void subtraction(double n1,double n2);
void multi(double n1,double n2);
void division(double n1,double n2);

int main(int nNumberofArgs,char* pszArgs[])
{
    double n1,n2;
    int choice;

    cout << "Welcome to the math games!" << endl;

    for(;;)
    {
        cout << "Enter a number choice: " << endl;
        cout << "1 - Addition" << endl;
        cout << "2 - Subtraction" << endl;
        cout << "3 - Multiplication" << endl;
        cout << "4 - Division" << endl;
        cout << "5 - Exit" << endl;
        cout << endl << "Choice: ";
        cin >> choice;

        if(cin.fail())
        {
            cout << "Invalid answer, now quitting to prevent crash..." << endl;
            system("PAUSE");
            return 0;
        }

        srand((unsigned)time(0));
        n1 = rand() % 100 + 1;
        n2 = rand() % 100 + 1;

        switch(choice)
        {
        case 1:
            addition(n1,n2);
            break;
        case 2:
            subtraction(n1,n2);
            break;
        case 3:
            multi(n1,n2);
            break;
        case 4:
            division(n1,n2);
            break;
        case 5:
            cout << "Thank you for playing please come again!" << endl;
            system("PAUSE");
            return 0;
        default:
            cout << "Invalid Number!" << endl;
            system("PAUSE");
            return 0;
        }
    }
}

void addition(double n1,double n2)
{
    double answer;
    cout << "What is " << n1 << " + " << n2 << "?" << endl;
    cout << "Answer: ";
    cin >> answer;

    if(answer == n1 + n2)
    {
        cout << endl << "Correct!" << endl << endl;
    }
    else
    {
        cout << endl << "Wrong! The right answer was " << n1 + n2 << endl << endl;
    }
}

void subtraction(double n1,double n2)
{
    double answer;
    cout << "What is " << n1 << " - " << n2 << "?" << endl;
    cout << "Answer: ";
    cin >> answer;

    if(answer == n1 - n2)
    {
        cout << endl << "Correct!" << endl << endl;
    }
    else
    {
        cout << endl << "Wrong! The right answer was " << n1 * n2 << endl << endl;
    }
}

void multi(double n1,double n2)
{
    double answer;
    cout << "What is " << n1 << " * " << n2 << "?" << endl;
    cout << "Answer: ";
    cin >> answer;

    if(answer == n1 * n2)
    {
        cout << endl << "Correct!" << endl << endl;
    }
    else
    {
        cout << endl << "Wrong! The right answer was " << n1 * n2 << endl << endl;
    }
}

void division(double n1,double n2)
{
    double answer;
    double r = n1 / n2;
    cout << "What is " << n1 << " / " << n2 << "?" << endl;
    cout << "Remember that your answer must only have 6 numbers in it, round" << endl;
    cout << "0 does not count as a number, remember to do 0.123 etc." << endl;
    cout << "Answer: ";
    cin >> answer;

    if(answer == r)
    {
        cout << endl << "Correct!" << endl << endl;
    }
    else
    {
        cout << endl << "Wrong! The right answer was " << r << endl << endl;
    }
}
So what happens after they user does a problem? Does the program just die or just it output something unexpected before quitting?

One thing I notice is that you are using doubles for all values, even when rand() returns integers. This could be problematic with more complex arithmetic because, due to rounding error, it is very unlikely two doubles will exactly == each other. As an example, 0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1 is not == to 1.0 in floating point arithmetic. This could be the reason your division isn't "working"; because the computer's calculation may not be able to exactly represent the correct value.
Do you know how to fix?
Topic archived. No new replies allowed.