srand()设置随机数种子
rand()生成0 – RAND_MAX范围的随机数
加上其他运算,我们能够生成任意范围的随机数 。rand()是将随机数表里面的随机数顺序输出。所以,如果不设定随机数种子,生成的随机数是固定的。
int main()
{
char str[10] = {0};
int j =0;
while(j < 10)
{//生成随机的三个数字
int i = strlen(str);
for (;i < 3;i++){
str[i] = '0' + rand() % 10;
}//生成随机两个字母
str[i++] = 'A' + rand() % 26;
str[i] = 'A' +rand() % 26;//输出结果
printf(str);
printf("\n");
j++;
str[0] = '\0';
}
return(0);
}
每次运行这个程序都将产生相同的结果
如图第一次:
第二次运行:
于是用srand()设置种子后尝试,代码如下
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char str[10] = {0};
int j =0;
while(j < 10)
{
srand((unsigned)time(NULL));
//用时间添加随机数种子
int i = strlen(str);
for (;i < 3;i++){
str[i] = '0' + rand() % 10;
}
str[i++] = 'A' + rand() % 26;
str[i] = 'A' +rand() % 26;
printf(str);
printf("\n");
j++;
str[0] = '\0';
}
return(0);
}
运行,
因为srand语句在循环内,每一次都用时间做种,程序执行速度很快,所以获取时间精度内,数值不便,于是每一次循环都是一样的,如果把srand()放在循环外,就能产生不同的不同的序列:结果就是下面这样:

看起来就是想要的结果了
如果我非要把srand()放在while里面呢,也行,我们可以这样写
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char str[10] = {0};
int j =0;
while(j < 10)
{
srand((unsigned)time(NULL) + (unsigned)rand());
int i = strlen(str);
for (;i < 3;i++){
str[i] = '0' + rand() % 10;
}
str[i++] = 'A' + rand() % 26;
str[i] = 'A' +rand() % 26;
printf(str);
printf("\n");
j++;
str[0] = '\0';
}
return(0);
}
以随机数加时间做种,但是万变不离其宗,最后随机数生成还是靠时间,但是加上随机数之后呢,还取决于你循环里面调用rand()的次数,不管怎么说,当程序确定,时间确定,生成的随机数都是一样的。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

评论(0)