【问题标题】:Number Guessing game does not output right猜数字游戏不正确输出
【发布时间】:2021-05-20 12:19:23
【问题描述】:

我正在尝试创建一个数字猜谜游戏,其中用户输入他们想要猜测的数字整数以及这些整数的范围 1 到 (m)。然后计算机随机生成该范围内的数字供用户猜测。用户猜测直到他们得到所有数字正确例如:

输入数字整数:4 输入从 1 到 (m) 的整数范围:6 输入猜测:2 3 1 4 你的3个猜测是正确的。再猜 输入猜测:2 3 1 6 正确的。你想再玩一次吗?

我现在得到的输出是:

输入数字整数:4

输入从 1 到 (m) 的整数范围:6

输入您在 1 到 6 范围内选择的 4 的猜测值:2 3 1 4

此 game.cpp、game.h 和 driver.cpp 共有三个文件。如果您发现我的代码有其他问题,请告诉我。这是我用 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;


};

【问题讨论】:

    标签: c++


    【解决方案1】:

    线

    inputGuess.push_back(n);
    

    仅添加一个元素,但您在此处使用 n 元素:

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

    因此,当n 大于 1 时会发生超出范围的访问。

    要将元素的数量设置为n,您应该使用resize(),如下所示:

    inputGuess.resize(n);
    

    【讨论】:

    • 好的,我听从了你的建议,我不再收到这些错误了,谢谢。
    • 现在我有一个问题,在用户输入他们的猜测后,程序什么都不做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 2016-06-21
    • 2013-10-09
    相关资源
    最近更新 更多