srand(time(NULL));为什么把随机种子放在循环体内多次产生随机数一样而放在循环体外却没有问题呢?

#include<stdio.h>#include<stdlib.h>#include<time.h>//含time函数的原型intmain(){srand(time(N... #include<stdio.h>
#include<stdlib.h>
#include<time.h>//含time函数的原型
int main()
{
srand(time(NULL));//调用当前系统时钟产生随机种子
int a,b,i,m1=0,m2=0,m3=0,n;
char n1,n2;
printf("Please input two player's n and how many matchs ongoing?");
scanf("%c%c%d",&n1,&n2,&n);
for(i=1;i<=n;i++)
{
a=1+rand()%6;
b=1+rand()%6;
//若把srand(time(NULL))放在此处就不能产生随机数了
printf("%c's points is %d %c's points is %d\n",n1,a,n2,b);
if(a>b)
{
printf("%c is winner in this round\n\n\n",n1);
m1++;
}
else if(a==b)
{
printf("Draw!\n\n\n");
m3++;
}
else
{
printf("%c is winner in this round\n\n\n",n2);
m2++;
}
}
printf("%c won %d times,%c won %d times,draw %d times.\n",n1,m1,n2,m2,m3);
return 0;
}
展开
 我来答
vbtraz
2010-11-08 · TA获得超过5530个赞
知道大有可为答主
回答量:4152
采纳率:0%
帮助的人:4406万
展开全部
因为你用法错了。

为什么错了只有贴代码才知道

srand(time(NULL)) 这是调用time函数得到当前的时间, 用这个时间给随机设定个初始值。 这个事情一个程序里只需要做一次, 为什么要把它放在循环里? 如果放在循环里,因为运行速度比较快, 时间没变化, 所以总是用同一个数给它初始化, 自然得到的序列就是相同的
初试锋芒天啊
2015-07-24 · TA获得超过176个赞
知道小有建树答主
回答量:236
采纳率:71%
帮助的人:108万
展开全部
srand中是以时间为参数,放在循环体内,运行速度快,时间还未改变又被当作了参数,建议添加sleep一下,再试试看看。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飞翔370766
2018-08-31
知道答主
回答量:13
采纳率:0%
帮助的人:1万
展开全部
把随机数种子代码srand((unsigned int)time(NULL));放在循环外面。
把rand()%放进循环里面就ok!
只要是随机数种子这样做是不会出错的 !!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式