1

The following code takes a user-provided number of sides for the dice, and then calls a function to return the random result of the dice roll. However, I can't figure out how to generate a random number between 1 and the number provided.

#include <iostream>
    using namespace std;
    int main() {
      int numberOfSides = 0;

      do
      {
        cout << "How many sides do you want the die to have? ";
        cin >> numberOfSides;
        if (numberOfSides <= 0)
        {
          cout << "Error: Please enter a positive integer!" << endl << endl;
        }
      }  while (numberOfSides <= 0);

      int result = rollDie(numberOfSides);
      cout << "You rolled a " << result << endl;
    }

    int rollDie(int numberOfSides) 
    {
      // Complete this function  
    }
Korosia
  • 593
  • 1
  • 5
  • 19
umerdino
  • 9
  • 1
  • Can you edit the question to include the specific problem you're having? It sounds like you question is "write this function for me", which are off-topic for Stack Overflow. – Korosia Feb 08 '20 at 09:58
  • 2
    Perhaps your question is something like "How do a generate a random integer between 1 and N?" – Korosia Feb 08 '20 at 09:59
  • Does this answer your question? [Generate random numbers uniformly over an entire range](https://stackoverflow.com/questions/288739/generate-random-numbers-uniformly-over-an-entire-range) The `std::uniform_int_distribution` part should explain how to 'roll' a number between 1 and `numberOfSides` – Korosia Feb 08 '20 at 10:56

1 Answers1

1

Random number generatrion is described in the C++ reference as an example.

Please look at here.

There you will find also the description. I completed your function with the referenced code.

Please see:

#include <iostream>
#include <random>

int rollDie(int numberOfSides)
{
    std::random_device rd;  //Will be used to obtain a seed for the random number engine
    std::mt19937 gen(rd()); //Standard mersenne_twister_engine seeded with rd()
    std::uniform_int_distribution<> dis(1, numberOfSides);
    return dis(gen);
}


int main() {
    int numberOfSides = 0;

    do
    {
        std::cout << "How many sides do you want the die to have? ";
        std::cin >> numberOfSides;
        if (numberOfSides <= 0)
        {
            std::cout << "Error: Please enter a positive integer!\n\n";
        }
    } while (numberOfSides <= 0);

    int result = rollDie(numberOfSides);
    std::cout << "You rolled a " << result << "\n";
}
A M
  • 14,694
  • 5
  • 19
  • 44