〃忝書γě渎ぐ 发表于 2020-6-4 16:40:08

srand有什么用?

#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;
}
看网上一些解释,还是看不懂,求大神说的通俗易懂些。

我叫MD 发表于 2020-6-4 16:40:09

因为 rand() 函数基于随机种子有个算法,这个要深究你就的研究 rand() 函数的实现了
如果输出的数值都一样,那还叫什么随机

我叫MD 发表于 2020-6-4 17:30:32

srand ()   初始化随机种子

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

所以 srand() 初始化随机种子的时候使用时间,因为时间相对是一直在改变的,所以每次初始化的随机种子不一样,这样就实现了相对的随机

〃忝書γě渎ぐ 发表于 2020-6-4 18:59:33

我叫MD 发表于 2020-6-4 17:30
srand ()   初始化随机种子

简单理解:


可是我屏蔽了srand,循环后,数字好像也是随机的,用的是vs2013

我叫MD 发表于 2020-6-4 20:11:47

〃忝書γě渎ぐ 发表于 2020-6-4 18:59
可是我屏蔽了srand,循环后,数字好像也是随机的,用的是vs2013

屏蔽srand是什么意思

〃忝書γě渎ぐ 发表于 2020-6-4 23:56:41

我叫MD 发表于 2020-6-4 20:11
屏蔽srand是什么意思

//注释掉还是一个结果

我叫MD 发表于 2020-6-5 00:28:47

〃忝書γě渎ぐ 发表于 2020-6-4 23:56
//注释掉还是一个结果

你分别运行2次 截图给我看看

〃忝書γě渎ぐ 发表于 2020-6-5 00:31:44

我叫MD 发表于 2020-6-5 00:28
你分别运行2次 截图给我看看

哦,我试一下

〃忝書γě渎ぐ 发表于 2020-6-5 00:33:13

我叫MD 发表于 2020-6-5 00:28
你分别运行2次 截图给我看看

果然像你说的,可我循环输出,为什么都不一样?

〃忝書γě渎ぐ 发表于 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变成不同的呢

405794672 发表于 2020-6-5 10:14:06

本帖最后由 405794672 于 2020-6-5 10:57 编辑

取随机种子。
页: [1]
查看完整版本: srand有什么用?