C语言中连续调用rand函数,返回值不变
最近用C语言随机函数编程发现了一个奇怪的现象:
简易版代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int test1()
{
srand((unsigned)time(NULL));
int n;
n=rand()%100;
return n;
}
int main()
{
int i;
for(i=0;i<10;i++)
{
printf("%d ",test1());
}
printf("\n");
}
代码通俗易懂不做解释,代码效果展示如下:
奇怪的事情发生了,rand函数10次调用的返回值竟然是一样的。
修改代码:
然而这次,代码效果貌似正常了一些:
上网搜索原因,说是因为time(NULL)是返回当前秒数,由于程序调用时间很短,time(NULL)值没有变,所以rand()使用的种子是不变的,因此每次初次调用返回值是不变的。经过检验,这种说法合理。
展示代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int test1()
{
srand((unsigned)time(NULL));
printf("%d ",time(NULL)); //插入这一句
int n;
n=rand()%100;
return n;
}
int main()
{
int i;
for(i=0;i<10;i++)
{
printf("%d \n",test1());
}
printf("\n");
}
代码效果展示:
原来是time(NULL)在搞鬼,所以为了程序运行的安全性和可靠性,srand()函数还是在main函数中调用比较保险。