要完成猜数字游戏,首先要生成随机数,那么该怎么生成随机数?、
1.rand函数
rand函数是库函数,使用的时候要使用头文件stdlib.h
c语言中,提供了rand函数来生成随机数,来看一下函数使用:
但是rand函数返回的其实是伪随机值,它的范围在0 ~ RAND_MAX。这个RAND_MAX的⼤⼩是 依赖编译器上实现的,但是⼤部分编译器上是32767。
示例:
#include <stdio.h>
#include <stdlib.h>int main()
{printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());return 0;
}
当我们多运行几次,会发现随机值生成都是一样的,这是为什么呢?
如果再深⼊了解⼀下,我们就不难发现,其实rand函数⽣成的随机数是伪随机的,伪随机数不是真正 的随机数,是通过某种算法⽣成的随机数。真正的随机数的是⽆法预测下⼀个值是多少的。⽽rand函 数是对⼀个叫“种⼦”的基准值进⾏运算⽣成的随机数。
之前生成的随机值都是相同的,那是因为rand默认的种子为1。
如果想要改变随机值,那就要改变种子。
2.srand函数
c语言又提供了一个函数叫做srand,用来初始化随机值的生成器。
函数使用:
srand函数可以设置rand函数需要的种子。
程序中在调⽤rand函数之前先调⽤srand函数,通过srand函数的参数seed来设置rand函数⽣成随 机数的时候的种⼦,只要种⼦在变化,每次⽣成的随机数序列也就变化起来了
那怎么让种子每次都能变化呢?那就要引出下一个time函数。
3.time函数
在程序中我们⼀般是使⽤程序运⾏的时间作为种⼦的,因为时间时刻在发⽣变化的。
在C语⾔中有⼀个函数叫time,就可以获得这个时间,time函数原型如下:
time函数的时候需要包含头⽂件:time.h
大家记住:
如果timer是NULL,就只返回这个时间的差值。time函数返回的这个时间差也被叫做:时间戳
那我们就可以把随机值的代码改写:
#include <stdio.h>
#include <stdlib.h>int main()
{//time的返回值作为种子//srand的参数类型为unsigned int所以需要强制类型转换srand((unsigned int)time(NULL));printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());return 0;
}
这时候我们就会发现产生的就是随机值。
注意:srand函数是不需要频繁调⽤的,⼀次运⾏的程序中调⽤⼀次就够了。