在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(clock()); /* seconds since program start */
srand(time(NULL)); /* seconds since 1 Jan 1970 */
你必须种子rand()
。
srand ( time(NULL) );
通常用于初始化随机种子。 除此以外,
在调用rand()之前,你需要一个种子。 尝试调用“ srand (time (NULL))
”