关于c++里rand()

运行环境vs2005
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void creatrandom()
{
srand( (unsigned)time( NULL ) );

int i=1 + rand()%20;

cout<<i<<endl;

}

int _tmain(int argc, _TCHAR* argv[])
{
for(int i=0;i<10;i++)
{

creatrandom();
}

}

为什么调用creatrandom()后每次出现的数字是一样的呢??
可不可以帮忙详细解释下,不要网上copy的。
谢谢~~~~
呵呵,知道了。srand((int)time(0));放在for循环之前就好了
只调用一次就ok。。。8过还是希望帮忙解释下。。3Q

随机数并不是真的随机,它是根据一个种子来产生的一个伪随机序列,其算法是确定的。对于某一特定的种子,这个序列当然也会相同。
在楼主的例子中,srand((unsigned)time( NULL))中,种子就是(unsigned)time( NULL)。由于只循环了10次,耗时还不到1ms,故10次循环中这个种子(系统时间)都是一样的。想要不同的结果,可以把这个循环加大(非常大),或者循环一次之后挂起一会。
其实最关键的,楼主的初始化用的不对,只需要初始化一次就够了,就在main函数里面调用一次,不用每次都在createrandom里用,那就不会出现这种问题了
温馨提示:内容为网友见解,仅供参考
第1个回答  2007-01-29
rand要“初始化”
C不懂,估计也要初始化。
以下是vb里面的解释

因每一次连续调用 Rnd 函数时都用序列中的前一个数作为下一个数的种子,所以对于任何最初给定的种子都会生成相同的数列。

在调用 Rnd 之前,先使用无参数的 Randomize 语句初始化随机数生成器,该生成器具有基于系统计时器的种子。
第2个回答  2007-01-29
我觉的你的程序还是不对 你能说一下原题吗 你能告我这个srand( (unsigned)time( NULL ) );
是想干什么?