关于c++里rand()

运行环境vs2005#include"stdafx.h"#include<stdio.h>#include<stdlib.h>#include<time.h>voidcr... 运行环境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
展开
 我来答
James_knows
2007-01-29 · 超过14用户采纳过TA的回答
知道答主
回答量:30
采纳率:0%
帮助的人:0
展开全部
随机数并不是真的随机,它是根据一个种子来产生的一个伪随机序列,其算法是确定的。对于某一特定的种子,这个序列当然也会相同。
在楼主的例子中,srand((unsigned)time( NULL))中,种子就是(unsigned)time( NULL)。由于只循环了10次,耗时还不到1ms,故10次循环中这个种子(系统时间)都是一样的。想要不同的结果,可以把这个循环加大(非常大),或者循环一次之后挂起一会。
其实最关键的,楼主的初始化用的不对,只需要初始化一次就够了,就在main函数里面调用一次,不用每次都在createrandom里用,那就不会出现这种问题了
shg2ff
2007-01-29 · TA获得超过6326个赞
知道大有可为答主
回答量:1.5万
采纳率:50%
帮助的人:1.1亿
展开全部
rand要“初始化”
C不懂,估计也要初始化。
以下是vb里面的解释

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

在调用 Rnd 之前,先使用无参数的 Randomize 语句初始化随机数生成器,该生成器具有基于系统计时器的种子。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9da9ff72b
2007-01-29
知道答主
回答量:36
采纳率:0%
帮助的人:11.7万
展开全部
我觉的你的程序还是不对 你能说一下原题吗 你能告我这个srand( (unsigned)time( NULL ) );
是想干什么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式