首页
社区
课程
招聘
[旧帖] [求助]产生随机数,一样? 0.00雪花
发表于: 2015-5-22 08:50 1470

[旧帖] [求助]产生随机数,一样? 0.00雪花

2015-5-22 08:50
1470
#include "stdio.h"
#include "time.h"
#include "stdlib.h"

void cs(void)
{
        int j;
        srand((unsigned)time(NULL));
        j = rand()%10;
        printf("%d\n",j);
}
void main()
{
        cs();
        cs();
        cs();
        cs();
        getch();

}
这样产生的随机数为什么会是一样的?(打印四个相同的)
如果是在main函数中连续使用rand()%10就不会这样,求解释

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 11
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
srand((unsigned)time(NULL)); 相当于把time作为种子产生了一个伪随机序列,只要调用一次,后面就可以一直调用rand()函数了。如果按照你这个写法,因为执行速度很快time基本没有变化,time返回的是秒数,所以产生结果应该都没变。
你可以尝试这样。
#include "stdio.h"
#include "time.h"
#include "stdlib.h"
#include <windows.h>
void cs(void)
{
        int j;
        srand((unsigned)time(NULL));
        j = rand()%10;
        printf("%d\n",j);
}

void main()
{
        cs();
        Sleep(1000);
        cs();
        Sleep(1000);
        cs();
        Sleep(1000);
        cs();
        getch();
       
}
或者是这样
#include "stdio.h"
#include "time.h"
#include "stdlib.h"
void cs(void)
{
        int j;
        j = rand()%10;
        printf("%d\n",j);
}

void main()
{
        srand((unsigned)time(NULL));
        cs();
        cs();
        cs();
        cs();
        getch();
       
}
关于rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数。随机种子只要一次就够了。因为rand的内部实现是用线性同余法做的,rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。
2015-5-22 09:22
0
雪    币: 11
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
随机种子只要一次就够了。

一个线程中, 随机种子只要一次就够了。
2015-5-22 10:43
0
雪    币: 10
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
懂了,谢谢,其实我直接在main函数中设置一次种子就好了
2015-5-22 12:36
0
雪    币: 10
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我的两个问题都帮我了,谢谢啦
2015-5-22 12:38
0
游客
登录 | 注册 方可回帖
返回
//