c ++ - rand()总是在每次运行时输出相同的数字

时间:2014-01-09 12:45:16

标签: c++ visual-studio-2010 random

我在Visual Studio 2010上使用C ++。问题是我尝试生成一个随机数组,但结果在每次运行时总是相同的。例如:

Run 1:
[0 20103 43281 37162 101 299]
Stop
Run 2:
[0 20103 43281 37162 101 299]
Stop
...

因此,我的代码为数组生成随机值,但每次运行代码时它们总是相同的值(即使我清理了构建)。我真的需要为每次运行生成随机值。

以下是一些示例代码,完整的代码充满了简单的操作:

...
srand(time(NULL));
for (int i = 0; i < 31; i++){
    x[i] = x[i] + rand();
}

有什么想法吗?

请注意srand(time(NULL));行的存在。它已经在代码中了,但输出仍然没有问题。

2 个答案:

答案 0 :(得分:1)

  

请注意srand(time(NULL));行的存在。它已经在代码中了,但输出仍然没有问题。

播种准备一个新的伪随机序列; rand次呼叫会按顺序推进您。每次使用相同的参数调用seed时,都会再次启动相同的序列。

由于您的种子参数每秒只更改一次,如果您每秒运行一次以上的程序,您将看到相同的伪随机序列。

我建议使用更多的熵进行播种,但是如何做到这一点主要取决于平台。在Linux上我喜欢写srand(time(NULL) ^ getpid())

还要记住在你的程序中只播种一次(看起来你正确得到这个)。

答案 1 :(得分:0)

尝试像这样随机:

int a;
a=rand()%*whatever range you want it to be*;

您也可以更改srand(time(NULL));,因为NULL表示0。

srand(time(1000));

它的单位是毫秒,所以1000就是一秒。

希望它有所帮助!