C编程中的rand()问题?

可能重复:
为什么我总是使用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; } 

这是因为rand()始终从执行开始时的同一点初始化其伪随机序列。

在使用rand()获取不同的值之前,您必须输入一个非常随机的种子。 这可以通过函数srand完成,函数srand将根据传递的种子移动序列。

试试:

 srand(clock()); /* seconds since program start */ srand(time(NULL)); /* seconds since 1 Jan 1970 */ 

你必须播种rand()

srand ( time(NULL) ); 通常用于初始化随机种子。 除此以外,

在调用rand()之前需要一个种子。 尝试调用“ srand (time (NULL))

您必须首先使用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; } 

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()); } 

希望能帮助到你!