C++ 简单的掷骰子 - 如何返回多个不同的随机数

C++ Simple Dice roll - how to return multiple different random numbers

本文关键字:随机数 返回 掷骰子 简单 C++ 何返回      更新时间:2023-10-16

我对C++很陌生,正在尝试用骰子类/主制作一个简单的骰子。

我可以在我的范围内得到一个随机数 1-dieSize,但是,每次我"掷骰子"时,它只会给我相同的随机数。例如,当我掷这个骰子三次时,它会掷出 111 或 222 等,而不是 3 次不同的随机掷骰子。任何帮助解释这个问题将不胜感激!

我的模具头只是一个基本的头。我假设的问题是随机函数。

主要:

int main()
{
// Call menu to start the program
Die myDie(4);
cout << myDie.rollDie();
cout << myDie.rollDie(); // roll dice again
cout << myDie.rollDie(); // roll again

return 0;
}

模具.cpp:

Die::Die(int N)
{
//set dieSize to the value of int N
this->dieSize = N;
}
int Die::rollDie()
{
// Declaration of variables
int roll;
int min = 1; // the min number a die can roll is 1
int max = this->dieSize; // the max value is the die size
unsigned seed;
seed = time(0);
srand(seed);
roll = rand() % (max - min + 1) + min;
return roll;
}

在die中.cpp我包含了cstdlib和ctime。

正如 melpomene 在评论中建议的那样,您应该在程序的某个点只初始化一次随机的seed

rand()函数实际上并不是随机数创建者,而是对先前生成的值进行一系列位操作,该值从种子生成的第一个值开始(调用srand(seed)(。

#include <iostream>
#include <cstdlib>
int rollDie()
{
int roll;
int min = 1; // the min number a die can roll is 1
int max = 6;// this->dieSize; // the max value is the die size
roll = rand() % (max - min + 1) + min;
return roll;
}
int main()
{
srand(time(0));
for(int i=0;i<10;i++)
{
std::cout << rollDie() << std::endl;
}
}

您很有可能已经在使用 C++11,因此您应该阅读并使用随机库进行练习:http://en.cppreference.com/w/cpp/numeric/random