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函数中调用比较保险。