srand(time(NULL))与srand(time(0))的区别

(越详细越好,谢谢啦)
2024-11-22 07:41:18
推荐回答(1个)
回答(1):

1.概念A:srand用来设置随机数种子的,rand用来产生随机数的
srand(1);//1为随机的数的种子
printf("%d", rand());//因为种子为1不变,产生的随机数是不变的
2.void srand(unsigned int)查看参数为unsigned int
time_t time(time_t *);//time的构造函数带参time_t *
typedef long time_t; //time.h定义time_t为long
time(NULL);time(0)//返回的是一个long型时间值,取的是当前系统时间,因此总是变化的
3.srand(time(NULL))就是设置当前的时间值为种子,那么种子总是变化的
printf("%d", rand());//因为种子总是变化的,所以以该种子产生的随机数总是变化的
这里比较time(NULL)和time(0),没有多大意义啊
4.核心你该搞清楚 srand是怎么用的:srand定义种子,如果种子是个常量,那么产生的随机数不变,所以需要一个
总是变化的种子,而系统时间总是变化的将时间值转化成unsigned int传入srand就达到了产生可变种子的目的.因此
int iRet = rand()//产生的随机数每次都不一样
小例子:
#include
#include
#include

void main( void )
{
int i = 0;
srand( (unsigned)time(NULL));
//srand((unsigned int)time(0));
//srand(1);
for( i = 0; i < 100; i++ )printf("%d,[1,10]=%d\n", rand(), (rand()%10+1));
}