鱼C论坛

 找回密码
 立即注册
查看: 935|回复: 10

[已解决]srand有什么用?

[复制链接]
发表于 2020-6-4 16:40:08 | 显示全部楼层 |阅读模式
10鱼币
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>

  4. int main()
  5. {
  6.     time_t t;
  7.     srand(time(&t));

  8.     for(int i = 0 ; i < 5 ; i++ )
  9.     {
  10.       printf("%d\n", rand() % 50);
  11.     }
  12.     return 0;
  13. }
复制代码

看网上一些解释,还是看不懂,求大神说的通俗易懂些。
最佳答案
2020-6-4 16:40:09
因为 rand() 函数基于随机种子有个算法,这个要深究你就的研究 rand() 函数的实现了
如果输出的数值都一样,那还叫什么随机

最佳答案

查看完整内容

因为 rand() 函数基于随机种子有个算法,这个要深究你就的研究 rand() 函数的实现了 如果输出的数值都一样,那还叫什么随机
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-4 16:40:09 | 显示全部楼层    本楼为最佳答案   
因为 rand() 函数基于随机种子有个算法,这个要深究你就的研究 rand() 函数的实现了
如果输出的数值都一样,那还叫什么随机
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-4 17:30:32 | 显示全部楼层
srand ()   初始化随机种子

简单理解:
如果你使用 rand()  函数, 但是在之前没有调用 srand(),那么程序每次运行的值是一样的,(其实这里相当于在 rand() 之前默认调用了srand(1))
如果你使用 rand()  函数, 之前调用了srand() 函数,如: srand(1)  或者 srand(2)  或者 srand(3), 因为你程序每次运行的时候,初始化的随机种子都是一样的,所以 rand() 的值还是一样的

所以 srand() 初始化随机种子的时候使用时间,因为时间相对是一直在改变的,所以每次初始化的随机种子不一样,这样就实现了相对的随机
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-4 18:59:33 | 显示全部楼层
我叫MD 发表于 2020-6-4 17:30
srand ()   初始化随机种子

简单理解:

可是我屏蔽了srand,循环后,数字好像也是随机的,用的是vs2013
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-4 20:11:47 | 显示全部楼层
〃忝書γě渎ぐ 发表于 2020-6-4 18:59
可是我屏蔽了srand,循环后,数字好像也是随机的,用的是vs2013

屏蔽srand是什么意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-4 23:56:41 | 显示全部楼层
我叫MD 发表于 2020-6-4 20:11
屏蔽srand是什么意思

//注释掉还是一个结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-5 00:28:47 | 显示全部楼层
〃忝書γě渎ぐ 发表于 2020-6-4 23:56
//注释掉还是一个结果

你分别运行2次 截图给我看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-5 00:31:44 | 显示全部楼层
我叫MD 发表于 2020-6-5 00:28
你分别运行2次 截图给我看看

哦,我试一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-5 00:33:13 | 显示全部楼层
我叫MD 发表于 2020-6-5 00:28
你分别运行2次 截图给我看看

果然像你说的,可我循环输出,为什么都不一样?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-5 00:34:14 | 显示全部楼层
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main()
{
    time_t t;
    srand(time(&t));

    for(int i = 0 ; i < 5 ; i++ )
    {
      printf("%d\n", rand() % 50);
    }
    return 0;
}

输出结果:

41
17
34
0
19

运行几次都这样,但是为什么循环时,就可以41 17 34 0 19变成不同的呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-5 10:14:06 | 显示全部楼层
本帖最后由 405794672 于 2020-6-5 10:57 编辑

取随机种子。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 22:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表