Rand() 没有显示随机数,请帮助我了解出了什么问题:)



所以我是C++的新手,独自学习。。。直到现在一切都很顺利,但我正在学习如何使用rand((,结果确实让我有点困扰。。。

所以我的目标是在游戏开始时为玩家的生命值生成一个随机数。公平地说,我设置了50点的最小生命值,我想创建一个随机数,50是最小值,200是最大值。

int HP = 50 + rand() %200;
cout << HP;

现在,问题是:

程序总是给我相同的int
为了检查结果,我创建了一个新项目,只显示了具有相同值的rand()编号,并且我得到了相同的结果->91。这意味着,我认为int HP = 91;将完全相同。

实践和尝试是学习的关键(我认为(我在5个新项目上尝试了相同的rand()值,总是相同的数字。。。

std::srand((为rand((使用的伪随机数生成器种子。如果在调用srand((之前使用了rand((,那么rand(。

每次rand((与srand((一起播种时,它必须在连续调用中产生相同的值序列。

https://en.cppreference.com/w/cpp/numeric/random/rand

因此,你看到的正是rand应该做的事情。简单的解决方法是调用std::srand(std::time(nullptr));,这样每次程序运行时,它都会从不同的种子开始。

更高级的修复是研究令人敬畏的C++标准随机数库

std::default_random_engine e1(r());
std::uniform_int_distribution<int> uniform_dist(50, 250);
int HP = uniform_dist(e1);

rand()并不是最好的随机数生成器,但如果你要使用它,你需要用srand函数为它播种,如下所示:

srand(time(0));

最新更新