c++ - Rand() 不显示随机数,请帮助我了解问题所在:)
问题描述
所以我是 C++ 新手,独自学习......直到现在一切都很好,但我正在学习如何使用 rand(),结果确实让我有点困扰......
所以我的目标是在游戏开始时为玩家的 HP 生成一个随机数。公平地说,我设置了一个 50 点的最小 HP,我想创建一个随机数,其中 50 是最小值,200 是最大值。
int HP = 50 + rand() %200;
cout << HP;
现在,问题是:
程序总是给我一样的int
。
为了检查结果,我创建了一个新项目,只显示了rand()
具有相同值的数字,我得到了相同的结果 -> 91
。这意味着,我会说int HP = 91;
完全一样。
实践和试验是学习的关键(我认为)我rand()
在 5 个新项目上尝试了相同的值,总是相同的数字......
解决方案
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);