可能重复:
Why do I always get the same sequence of random numbers with rand()?
所以,是的,这可能看起来有点愚蠢,但是因为我在Java上变得合理后自学C,我已经遇到了一些麻烦。我正在尝试在C中使用rand()函数,但我只能调用它一次,当它执行时,它总是生成相同的随机数,即41。我正在使用Microsoft Visual C ++ 2010 Express,并且我已经设置它以便编译C代码,但唯一不起作用的是这个rand()函数。我尝试过包含一些常用的库,但没有任何作用。这是代码:
#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
int main(void)
{
printf("%d", rand()); //Always prints 41
return 0;
}
答案 0 :(得分:4)
这是因为rand()
始终从执行开始时的同一点初始化其伪随机序列。
在使用rand()
获取不同的值之前,您必须输入一个非常随机的种子。这可以通过函数srand
完成,函数将根据传递的种子移动序列。
尝试:
srand(clock()); /* seconds since program start */
srand(time(NULL)); /* seconds since 1 Jan 1970 */
答案 1 :(得分:3)
你必须播种rand()
。
srand ( time(NULL) );
通常用于初始化随机种子。否则,
答案 2 :(得分:2)
在调用rand()之前需要一个种子。尝试拨打“srand (time (NULL))
”
答案 3 :(得分:2)
您必须首先使用srand()初始化随机种子。
#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
int main(void)
{
srand(time(NULL)); // Initialise the random seed.
printf("%d", rand());
return 0;
}
答案 4 :(得分:1)
rand()
提供随机值,但您需要先将其播种。问题是如果你多次(可能)执行你的代码,使用相同的种子srand(time(NULL))
,那么rand()
;会给出相同的价值。
然后,第二个选项是执行,如Thiruvalluvar所说,srand(time(NULL))
然后rand()
。
上面的那个将给你1000个随机数。尝试执行此代码,看看会发生什么:
srand (time(NULL));
for (int i=0; i<1000; i++)
{
printf ("Random number: %d\n", rand());
}
希望它有所帮助!