我在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));
行的存在。它已经在代码中了,但输出仍然没有问题。
答案 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就是一秒。
希望它有所帮助!