C++ 简单的掷骰子 - 如何返回多个不同的随机数
C++ Simple Dice roll - how to return multiple different random numbers
我对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
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 整数不会重复超过随机数
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++ 简单的掷骰子 - 如何返回多个不同的随机数
- C++:为什么此方法每次都返回相同的随机数?
- 模式返回伪随机数生成器
- 返回相同值 (C++) 的随机数生成器
- C++随机数生成器,不是随机的,但总是返回相同的数字
- std::mt19937 不返回随机数
- cuda随机数并不总是返回0和1
- file.get()在循环C++后返回随机数
- 创建一个函数以返回指定范围内的随机数
- 对于给定的密钥,什么样的随机数生成系统会只返回一个结果
- 从函数返回指针给我随机数
- 提供的示例代码返回一个随机数,即使在抛出异常之后也是如此(提供的代码)
- 返回后的随机数组值
- c++从函数返回指针时的随机数