srand(time(NULL));//这条指令什么意思?
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
int main()
{
//S:黑桃 H:红心 C:草花 D:方块
char suits[] = {'S', 'H', 'C', 'D'};
//等级
char ranks[] = {'2','3','4','5','6','7',
'8','9','t','J','Q','K','A'};
int n;//产生几张牌
printf("你要必张牌:");
scanf("%d", &n);
srand(time(NULL));//这条指令什么意思?
bool f[4][13] = {false};
int i;
for(i=0; i<n; i++){
int s = rand()%4;
int r = rand()%13;
if(f[s][r]){
i--;
continue;
}
f[s][r] = true;
printf("%c%c ", suits[s], ranks[r]);
}
printf("\n");
} 展开
意思是利用系统时间,返回一个随机数。
srand函数是随机数发生器的初始化函数。原型:void srand(unsigned int seed);srand和rand()配合使用产生伪随机数序列。
TIME 返回的小数值为 0(零)到 0.99999999 之间的数值,代表从 0:00:00 (12:00:00 AM) 到 23:59:59 (11:59:59 P.M.) 之间的时间。
扩展资料
srand设置产生一系列伪随机数发生器的起始点,要想把发生器重新初始化,可用1作seed值。任何共它的值都把发生器匿成一个随机的起始点。rand检索生成的伪随机数。在任何调用srand之前调用rand与以1作为seed调用srand产生相同的序列。
此函数可以设定rand函数所用的随机数产生演算法的种子值。任何大于一的种子值都会将rand随机数所产生的虚拟随机数序列重新设定一个起始点。
参考资料来源:百度百科-time函数
参考资料来源:百度百科-srand
“srand(time(NULL));”这条指令的意思是利用系统时间来初始化系统随机数的种子值,使得每次运行由于时间不同产生而产生不同的随机数序列。
srand函数是随机数发生器的初始化函数。它的原型是“void srand(unsigned int seed);”srand和rand()配合使用产生伪随机数序列。
rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,rand根据这个种子的值产生一系列随机数。如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的。
srand(unsigned seed)函数通过参数seed来改变系统提供的种子值,从而可以使得每次调用rand函数生成的伪随机数序列不同,从而实现真正意义上的“随机”。
通常可以利用系统时间来改变系统的种子值,即srand(time(NULL)),可以为rand函数提供不同的种子值,进而产生不同的随机数序列。
扩展资料:
rand()函数的使用注意事项:
1、使用该函数首先应在开头包含头文件stdlib.h。
2、在标准的C库中函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX 是stdlib.h 中定义的一个整数,它与系统有关。
3、rand()函数没有输入参数,直接通过表达式rand()来引用。
4、因为rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以C语言的随机并不是真正意义上的随机,有时候也叫伪随机数。
5、为了使程序在每次执行时都能生成一个新序列的随机值,我们通常通过伪随机数生成器提供一粒新的随机种子。函数 srand()(来自stdlib.h)可以为随机数生成器播散种子。只要种子不同,rand()函数就会产生不同的随机数序列。srand()称为随机数生成器的初始化器。
参考资料来源:百度百科-srand
srand函数是随机数发生器的初始化函数。
原型:void srand(unsigned seed);
用法:它需要提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的rand()函数会出现一样的随机数。如: srand(1); 直接使用1来初始化种子。不过为了防止随机数每次重复常常使用系统时间来初始化,即使用 time函数来获得系统时间,它的返回值为从 00:00:00 GMT, January 1, 1970 到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型再传给srand函数,即: srand((unsigned) time(&t)); 还有一个经常用法,不需要定义time_t型t变量,即: srand((unsigned) time(NULL)); 直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的t数据。srand((int)getpid()); 使用程序的ID(getpid())来作为初始化种子,在同一个程序中这个种子是固定的。
srand(1)直接使用1来初始化种子。不过为了防止随机数每次重复常常使用系统时间来初始化//初始化为srand(0)呢?也会随机数重复?你说的重复是 重复出现初始化的数?所以传时间进去,
要是随即时间,传数进去?
上面程序要改成srand((unsigned) time(&t));//直接加上这句就行?
电脑的随机数都是伪随机,也就是通过一定的算法得出一个数列,然后每 rand()一次就取一个数。
而srand()的功能就是就是设置产生随机数的公式的参数(随机数种子),如果使用相同的种子,那么得到的随机数也就是相同的。自然,如果使用不同的种子,得出的随机数序列也是不同的。
不同的种子会得到 固定 的 不同的随机数序列。
例如:
void main()
{
srand(1);
cout<<rand()<<endl;
cout<<rand()<<endl;
srand(1);
cout<<rand()<<endl;
cout<<rand()<<endl;
srand(2);
cout<<rand()<<endl;
cout<<rand()<<endl;
srand(2);
cout<<rand()<<endl;
cout<<rand()<<endl;
}
输出结果:
41
18467
41
18467
45
29216
45
29216
由于通过srand(1)和srand(2)设置了不同的随机数种子
所以产生了两组不同的随机数,这组数与种子相对应。
那么怎么利用rand产生真正的“随机数”呢?
答案是通过srand(time(NULL))使得随机数种子随时间的变化而变化。
PS:time函数可以获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数,其值表示从CUT(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。
参考资料: baidu baike
//是以当前时间为种子,产生随意数。其中,time(null)用来获取当前时间,本质上得到的是一个大整数,然后用这个数来随机数。
第二,这个错误应该是代码中写楼了什么东西造成的,最大的可能应该是大括号少了一半或者好多半。