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;
}
看网上一些解释,还是看不懂,求大神说的通俗易懂些。 因为 rand() 函数基于随机种子有个算法,这个要深究你就的研究 rand() 函数的实现了
如果输出的数值都一样,那还叫什么随机 srand () 初始化随机种子
简单理解:
如果你使用 rand()函数, 但是在之前没有调用 srand(),那么程序每次运行的值是一样的,(其实这里相当于在 rand() 之前默认调用了srand(1))
如果你使用 rand()函数, 之前调用了srand() 函数,如: srand(1)或者 srand(2)或者 srand(3), 因为你程序每次运行的时候,初始化的随机种子都是一样的,所以 rand() 的值还是一样的
所以 srand() 初始化随机种子的时候使用时间,因为时间相对是一直在改变的,所以每次初始化的随机种子不一样,这样就实现了相对的随机 我叫MD 发表于 2020-6-4 17:30
srand () 初始化随机种子
简单理解:
可是我屏蔽了srand,循环后,数字好像也是随机的,用的是vs2013 〃忝書γě渎ぐ 发表于 2020-6-4 18:59
可是我屏蔽了srand,循环后,数字好像也是随机的,用的是vs2013
屏蔽srand是什么意思 我叫MD 发表于 2020-6-4 20:11
屏蔽srand是什么意思
//注释掉还是一个结果 〃忝書γě渎ぐ 发表于 2020-6-4 23:56
//注释掉还是一个结果
你分别运行2次 截图给我看看 我叫MD 发表于 2020-6-5 00:28
你分别运行2次 截图给我看看
哦,我试一下 我叫MD 发表于 2020-6-5 00:28
你分别运行2次 截图给我看看
果然像你说的,可我循环输出,为什么都不一样? #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:57 编辑
取随机种子。
页:
[1]