首页 > 解决方案 > Rand() 不显示随机数,请帮助我了解问题所在:)

问题描述

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

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

int HP = 50 + rand() %200;

cout << HP;

现在,问题是:

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

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

标签: c++visual-studiorandom

解决方案


std::srand() 播种 rand() 使用的伪随机数生成器。如果在对 srand() 的任何调用之前使用 rand(),则 rand() 的行为就像是使用 srand(1) 播种一样。

每次 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);

推荐阅读