【问题标题】:Rand() isn't displaying random number, please help me understand what's wrong :) [duplicate]Rand() 不显示随机数,请帮助我了解问题所在:) [重复]
【发布时间】:2020-03-11 03:25:54
【问题描述】:

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

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

int HP = 50 + rand() %200;

cout << HP;

现在,问题是:

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

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

【问题讨论】:

  • 程序总是给我相同的“int”。你忘了给随机数生成器播种吗?

标签: c++ visual-studio random


【解决方案1】:

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));,这样每次程序运行时,它都会以不同的种子开始。

更高级的解决方法是研究The awesome C++ standard randum number library

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

【讨论】:

    【解决方案2】:

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

    srand(time(0));

    【讨论】:

      猜你喜欢
      • 2022-12-17
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      相关资源
      最近更新 更多