Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Number Guessing game does not output right

Tags:

c++

Im trying to create a number guessing game where the user enters number integers they want to guess and the range of those integers 1 to (m). Then the computer randomly generates numbers in that range for the user to guess. The user guesses until they get all the numbers correct For example:

Enter number integers: 4 Enter the range of those integers from 1 to (m): 6 Enter guess: 2 3 1 4 3 of your guesses are correct. Guess Again Enter guess: 2 3 1 6 Correct. Would you like to play again.

The Output I get right now is:

Enter number integers: 4

Enter the range of those integers from 1 to (m): 6

Enter your guesses for the 4 in the range from 1 to 6 that you have selected: 2 3 1 4

There are three files for this game.cpp, game.h, and driver.cpp. Please let me know if you find anything else wrong with my code. This is my 1st program I have written in C++.

//game.cpp
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include "Game.h"
#include <iostream>
#include <iomanip>
#include <vector>



    //---------------------------------------------------------------------------------------------
    // generateNumbers: Fucntion to generate numbers between 1 to (m) and 
    // generate as many has user wanted.
    // n: the amount of integers
    // m: the max number the user wants
    // numbers: returns the numbers generated by the computer
    //---------------------------------------------------------------------------------------------
std:: vector<int> Game::generateNumbers(int n, int m) {


        // Declare array size to generate random numbers based on what is between 1 to (m)
        std::vector<int> random_numbers;
        int numbers;

        // Randomly generate n intgers between 1 to (m)
        for (int i = 0; i < n; i++) {
         numbers = (rand() % m) + 1;
         random_numbers.push_back(numbers);

        }

        return random_numbers;


    }


    //-----------------------------------------------------------------------------------------------
    // guessingGame: See's how many numbers the user got to correct until they win the game.
    // n: the amount of integers
    // m: the max number the user wants
    //-----------------------------------------------------------------------------------------------
    void Game::guessingGame(int n, int m) {

        // Declare variables
        std::vector<int> pointer;
        int correct_answers = 0;


        // Set inputGuess equal to a vector which is teh size of n
        std::vector<int> inputGuess;
        inputGuess.resize(n);

        pointer = generateNumbers(n, m);

        // Get user guesses integers
        for (int i = 0; i < n; i++) {
            std::cin >> inputGuess[i];
        }
        // See if the user guesses and computers answers match up
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (pointer[i] == inputGuess[j]) {
                    correct_answers++;  //counts how many numbers the user got correct
                }
            }
        }

    }



// driver.cpp
#include <iostream>
#include "Game.h"
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <iomanip>
#include <vector>


int main()
{
    //Declare variables
    Game guess;
    int n; // number of integers
    int m; // max value for integers
    int guesses;
    std::vector<int> userNumbers;
    


    std::srand(static_cast<unsigned int>(time(nullptr))); // Intialize random number

    // Prompt the user to enter integers and range
    
        // Have user enter number of integers they want
        std::cout << "Enter the Number of the Integers (n):  ";
        std::cin >> n;

        // Have user enter the range if integers between 1 to m
        std::cout << "Enter the Number of Each Integers from 1 to (m):  ";
        std::cin >> m;

        // guesses from user are not correct then user needs to keep guessing 
        while (userNumbers.size() != n) {
            std::cout << "Enter your guesses for the " << n << " " << "in the range from 1 to " << m << " " << "that you have been selected: "; 
            for (int i = 0; i < n; i++) {
                userNumbers.push_back(n);
                guess.guessingGame(n,m);
            }

            }
        

    // If the user has guessed the correct numbers and would like to play again
    if (userNumbers.size() == n) {
        std::cout << "You are correct! Play Again?";
    }
    // If numbers guessed not correct then display how many are correct
    else {
        std::cout << sizeof(userNumbers) << "of your guesses are correct." << std::endl;
    }

}; 

// game.h
#include <vector>

class Game {
public:
    // Get what numbers the users have guessed are correct
    std::vector<int> getNumbers() {
        return correct_number;
    }


    // Generate random numbers between the range set by user
    std:: vector<int> generateNumbers(int n, int m);

    // Begin the guessing game
    void guessingGame(int n, int m);

private:
    std::vector<int> correct_number; // numbers that are correct
    std::vector<int> input_guess;


};

1 Answers

The line

inputGuess.push_back(n);

adds only one element, but you are using n elements here:

// Get user guesses integers
for (int i = 0; i < n; i++) {
    std::cin >> inputGuess[i];
}

Therefore an out-of-range access happens when n is larger than 1.

To set the number of elements to n, you should use resize() instead like this:

inputGuess.resize(n);
like image 104
MikeCAT Avatar answered Jan 25 '26 07:01

MikeCAT



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!