yang666

#include <stdio.h>

//#include <Windows.h>

int main(void)

{

int i;

//srand((unsigned)time(NULL));//每次运行该程序时,如果当前秒数不同,则不同次运行生成的随机数不同,

for (i = 0; i < 20; i++)    // 否则不同次运行生成的随机数是一样的

{

//srand(_getpid());

srand((unsigned)time(NULL));//每次运行该程序时,如果当前秒数不同,则不同次运行生成的随机数不同,

 

printf("%d\n", rand() );//无论是否有种子,3个随机数都不一定会相同.

printf("%d\n", rand() );

printf("%d\n", rand() );

printf("====================\n");

//system("pause");

}

return 0;

}

结果:每次循环产生的随机数一样.如下图所示.

                            

 

  rand 是固定的迭代函数,对一个初始值不停嵌套计算,输出每次计算的结果。输出的序列有不错的统计性质,所以叫伪随机数。srand 就是设置这个初始值。不停地设置相同的初始值,rand 就总是初始值经过一次计算的结果,也就不会变。这是错误的用法。

正确的用法,srand 一个程序只能调用一次。或者说一个线程只调用一次(对于常见的每个线程一个随机数发生器状态的 C 运行时库)。

 

1.综上所述,注释掉for循环中的srand((unsigned)time(NULL)),使用for上一行的srand((unsigned)time(NULL)).

2.time(NULL)每秒变化一次,如果在一秒内连续执行该程序2,2次得到的随机数一样.这时,可以使用_getpid()代替time(NULL)._getpid()(VS2015,LINUX下为getpid()),获取进程ID.

 

分类:

技术点:

相关文章:

  • 2021-12-09
  • 2022-12-23
  • 2021-08-03
  • 2021-05-21
  • 2022-12-23
  • 2021-12-09
猜你喜欢
  • 2021-06-01
  • 2021-12-09
  • 2021-11-18
  • 2021-11-30
  • 2021-08-05
  • 2022-12-23
  • 2022-02-01
相关资源
相似解决方案