读书人

关于srand()位置的有关问题

发布时间: 2012-05-01 12:48:58 作者: rapoo

关于srand()位置的问题
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main()
{
int magic[3];
int guess;
srand(time(NULL));//在循环体外部
for(int counter=0;counter<4;counter++)
{
//srand(time(NULL));
magic[counter]=rand()%10;
}
for(int counter=0;counter<4;counter++)
printf("%d",magic[counter]);
return 0;
}


srand在外部的话能产生一个比较为好的伪随机,如果在内部的话这是AAAA形式的数字。为什么啊?请高手解答,小弟刚刚学习C语言~~

[解决办法]
种子只需要设置一次。
多次设置,因为是和时间相关的常量,所以 短时间内时间变化不大,
以至于随机数种子根本无效。
具体看实现
[解决办法]
srand(time(NULL)+clock()) 这样更好些
[解决办法]
种子设置一次就可以了。像你那样设置多次,每个伪随机数都成了时间的直接映射了。
[解决办法]
不用srand的话,rand每次运行后产生的都是同样一个随机序列。
因为调用同一个种子。
srand就是为了使种子不同,这样就可以在每次运行时根据时间(题),产生不同的随机序列。

读书人网 >C语言

热点推荐