每次运行程序时都有相同的随机数

son*_*ool 25 c++ random

我的随机数输出,每次运行我的游戏时以相同的顺序输出.为什么会这样?

我有

#include <cstdlib> 
Run Code Online (Sandbox Code Playgroud)

并使用它来生成随机数

randomDiceRollComputer = 1 + rand() % 6;
Run Code Online (Sandbox Code Playgroud)

Mys*_*ial 30

您需要为随机数生成器播种:

试着把它放在程序的开头:

srand ( time(NULL) );
Run Code Online (Sandbox Code Playgroud)

请注意,您需要#include <ctime>.

这里的想法是每次启动程序时为RNG添加不同的编号.通过使用时间作为种子,每次启动程序时都会得到不同的数字.

  • 基本上,RNG并不是真正随机的.他们使用一个公式来生成看似(伪)的随机数.因此,他们需要一个"起点"来开始生成序列.如果你没有种子,它将使用相同的默认种子并且每次都生成相同的序列. (4认同)
  • 为了获得更好的结果,在`srand`之后调用`rand`并抛弃返回值.事实证明,类似的种子会产生类似的第一个值,但它会迅速发散. (3认同)
  • @Mysticial:如果你的需求足够严重,那么`srand(time(NULL))`不够好,那么`rand()`就不够好了. (2认同)

tun*_*2fs 8

你需要给randum号码生成器一个种子.这可以通过获取当前时间来完成,因为这有希望是某种随机的.

#include <cstdlib>
#include <ctime>
using namespace std;

int main()
{
    int  r;
    srand(time(0));
    r = rand();
    return 0;
} 
Run Code Online (Sandbox Code Playgroud)