rand()总是在应用程序重启时返回相同的序列

Mat*_*hew 9 c++ random integer numbers

我有以下方法生成一个随机数:

int random_number() //Random number generator
{
    int x = rand() % 1000000 + 1; //Generate an integer between 1 and 1000000
    return x;
}
Run Code Online (Sandbox Code Playgroud)

对此方法的调用用于循环,该循环迭代五次.这种方法的问题在于,在运行程序多次时似乎总是生成相同的数字.怎么解决这个问题?

fem*_*gon 17

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

srand ( time(NULL) );
int x = rand() % 1000000 + 1;
Run Code Online (Sandbox Code Playgroud)

播种伪随机数生成器基本上决定了它将迭代的随机数集.使用时间是实现充分随机结果的标准方法.

编辑:

为了澄清,你应该只播种一次并获得许多随机数,如下所示:

srand ( time(NULL) );
loop {
    int x = rand() % 1000000 + 1;
}
Run Code Online (Sandbox Code Playgroud)

而不是像:

loop {
    //Particularly bad if this line is hit multiple times in one second
    srand ( time(NULL) ); 
    int x = rand() % 1000000 + 1;
}
Run Code Online (Sandbox Code Playgroud)


tom*_*ahh 5

打电话给srand(time(NULL));程序启动时.

srand为rand函数设置种子.赋予它返回值time(NULL)有助于在每个程序运行中获得不同的种子.

当您将问题标记为c ++时,您可以使用c ++ 11功能来处理随机数生成.