c++;-rand()每次运行时总是输出相同的数字 我在Visual Studio 2010上使用C++。问题是我试图生成一个随机数数组,但每次运行的结果总是相同的。例如: Run 1: [0 20103 43281 37162 101 299] Stop Run 2: [0 20103 43281 37162 101 299] Stop ...

c++;-rand()每次运行时总是输出相同的数字 我在Visual Studio 2010上使用C++。问题是我试图生成一个随机数数组,但每次运行的结果总是相同的。例如: Run 1: [0 20103 43281 37162 101 299] Stop Run 2: [0 20103 43281 37162 101 299] Stop ...,c++,visual-studio-2010,random,C++,Visual Studio 2010,Random,因此,我的代码为数组生成随机值,但每次运行代码时(即使清除构建),这些值始终相同。我真的需要为每次运行生成随机值 下面是一些示例代码,完整的代码包含了许多简单的操作: ... srand(time(NULL)); for (int i = 0; i < 31; i++){ x[i] = x[i] + rand(); } 。。。 srand(时间(空)); 对于(int i=0;i

因此,我的代码为数组生成随机值,但每次运行代码时(即使清除构建),这些值始终相同。我真的需要为每次运行生成随机值

下面是一些示例代码,完整的代码包含了许多简单的操作:

...
srand(time(NULL));
for (int i = 0; i < 31; i++){
    x[i] = x[i] + rand();
}
。。。
srand(时间(空));
对于(int i=0;i<31;i++){
x[i]=x[i]+rand();
}
有什么想法吗

请注意
srand(time(NULL))的存在行。它已经在代码中,但输出仍然不正常

请注意
srand(time(NULL))的存在行。它已经在代码中,但输出仍然不正常

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

由于种子参数每秒仅更改一次,如果每秒运行程序超过一次,则会看到相同的伪随机序列。

我建议使用更多的熵进行播种,尽管如何做到这一点在很大程度上取决于平台。在Linux上,我喜欢编写
srand(time(NULL)^getpid())


另外,请记住在您的程序中只播一次种子(看起来您做对了)。

尝试如下随机化:

int a;
a=rand()%*whatever range you want it to be*;
您还可以更改
srand(time(NULL)),因为NULL表示0

srand(time(1000));
它的单位是毫秒,所以1000是1秒


希望有帮助

@olevegard可能重复:问题无关。他的代码清楚地表明他正在播种rng。@LucasHarada:你能提供更多的示例代码吗。您当前的示例中肯定还没有显示其他一些情况。我这么说是因为,即使你添加了随机数,这些数字中的一些也会减少。@ LuasasHurad:“上面的简化代码”不是一个有效的C++程序。我们无法按原样将其提供给编译器,并查看您所讨论的行为。我的意思是,我们甚至不知道什么是
x
@卢卡斯:你应该在发帖前为自己的调试目的这么做!这意味着当你说“我将它简化为上面的代码,但它仍然具有相同的行为”时,你是不诚实的。如果你的程序为相隔超过1秒的运行输出相同的伪随机序列,那么这个答案是不正确的,但是,你的问题中确实遗漏了一些至关重要的东西。