-2

This is the code I currently have:

#include <iostream>
#include <cstdlib>
#include <cmath>
#include <ctime>
using namespace std;

int random (int sum);
bool isValid(int userNum, int sum);

int main() {
    int whoTurn, playAgain = 1, userNum, sum;
    cout << "\nLet's play a game of 100!\n"
            "In a game of 100 we start with a total of 0\n"
            "and we take turns adding numbers from 1-10\n"
            "to that total. Whoever is able to add a number\n"
            "to the total to get 100 is the winner.\t"
            "Ready?\n";
    while ((playAgain = 1)) {
        bool win = false;
        cout << "Do you want to go first or should I? [1 = you, 2 = me(computer)]: ";
        cin >> whoTurn;
        while (not win) {
            if (whoTurn == 1) {
                sum = userNum + sum;
                cout << "Number you want to add (1-10): ";
                cin >> userNum;
                if (isValid(userNum, sum)) {
                    cout << "You add " << userNum << ", total is now " << sum << "\n";
                    whoTurn = 2;
                }
                else {
                 continue;
                }
            }
            if (whoTurn == 2) {
                sum = userNum + sum;
                    cout << "I add " << int (random (sum))  << ", total is now " << sum << "\n";
                    whoTurn = 1;
                    if (sum == 100.0) {
                        cout << "Computer wins!";
                        win = true;
                    }
                }
            }
            cout << "Do you want to play again (1 = yes, 2 = no): ";
            cin >> playAgain;
        }
        return 0;
}


//validating userNum function
bool isValid(int userNum, int sum) {

    if (1.0 <= userNum && userNum <= 10.0 && userNum + sum <= 100.0) {
        return true;
    } else {
        return false;
    }
}

//computer random/win turn function
    int random(int sum) {
        int randTurn = rand() % 10 + 1;
        srand((unsigned) time(NULL));
        if (sum >= 90) {
            return 100-sum;
        }
        else {
            return randTurn;
        }
    }

This is the output that I'm getting, notice the error in sum calculation:

Let's play a game of 100!
In a game of 100 we start with a total of 0
and we take turns adding numbers from 1-10
to that total. Whoever is able to add a number
to the total to get 100 is the winner.  Ready?
Do you want to go first or should I? [1 = you, 2 = me(computer)]: 1
Number you want to add (1-10): 59
Number you want to add (1-10): 3
You add 3, total is now 62
I add 8, total is now 65
Number you want to add (1-10): 

I know I've got the calculation for the sum wrong somewhere in the code. Where do I need to fix it? Sorry if this is a simple fix or just product of bad code, I'm still pretty new to all of this.

halfer
  • 19,824
  • 17
  • 99
  • 186
  • 2
    What have you learned stepping through your code with a debugger? – Stephen Newell Oct 20 '22 at 18:40
  • 2
    [What is a debugger and how can it help me diagnose problems?](https://stackoverflow.com/questions/25385173/what-is-a-debugger-and-how-can-it-help-me-diagnose-problems) – Jesper Juhl Oct 20 '22 at 18:40
  • OT: `srand((unsigned) time(NULL));` should be called 1 time at the beginning of `int main()` putting it in a function can cause your pseudo random numbers to be less random. – drescherjm Oct 20 '22 at 18:47
  • FYI, the variable `userNum` is not initialized; could be anything. – Thomas Matthews Oct 20 '22 at 19:50

1 Answers1

0

I think you are just printing the sum before you add the userNum to the sum in the next loop. You are just one loop behind with your output :)

Can I also direct your attention to the game state of your main loop when the computer plays, whoTurn == 2 I think you are not adding the random value you generate to your sum.