目录
rand()函数
RAND_MAX的解释
srand函数
time函数
time_t解析
小结:
具体实现代码:
在我们的日常敲代码的时候,偶尔会需要使用到产生一个随机数。
但是我们应该如何去生成一个随机数呢?
********在文章最后有随机数生成的具体代码,一个猜数字游戏。
rand()函数
其实,C的库函数中已经定义好了一个取随机数的函数。
那就是int rand(void)这个函数。
下面就是官方的解释:
我们从上往下看。
发现右上角有一个<cstdlib>这个符号,其实,这个就是在使用这个函数时需要引用的头文件。
不过这个是C++使用时的语法,在C中,引用的头文件为<stdlib.h>就行。
接下来,我们呢就看到了这一段。
RAND_MAX的解释
那么RAND_MAX是什么呢?
这里我们可以看到,其实RAND_MAX也就是一个数字,不过它是库函数中定义好了的一个常量
也就是32767,并且在使用它的时候也需要调用<cstdlib>这个头文件。
噢,那我们就知道了,那生成一个随机数还确实蛮方便,只要引用下头文件,然后使用rand函数就行了。真的是这样的么?
但我们还没看完这个解释。
我们接着往下看,就可以看到这一句话了。
srand函数
没想到了,我们在使用rand函数之前还必须得先使用srand这个函数。
那好吧,我们接着来看看srand这个函数了。
从文档中我们可以知道,srand函数的声明是:
void srand(unsigned int seed )
说明这个函数是没有返回值的,调用就行,它的参数是一个无符号整形。
并且在它的右上角也有一个<cstdlib>,那么它和rand函数一样,也需要引用<stdlib.h>这个头文件了
关键,就是下面这一句让人摸不着头脑了。
就是这句话:
其实看起来这么长的一段话,大概意思就是:
你想使用我这个srand函数,得先在我的参数里传一个随机数进来。
我们最原本就是想要产生一个随机数,到了你这里你却找我要随机数。
那我调用你干什么?
time函数
这里,又得使用到库函数中当中的另一个函数了,也就是time函数。
其实也就是一个时间戳,它就是一个一直在变化的数字。
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
这个函数的类型是time_t类型的,并且它的右上角有个<ctime>
在C中它需要引用的头文件也就是<time.h>这个头文件了。
它的返回值time_t也就是上面说到的时间戳了。
接着,我们看到这一段话:
具体意思就是:
这个函数将会返回一个时间戳。而且它里面的参数你可以也传一个时间戳函数进去,也可以啥都不传,只需要传一个NULL空指针就行。
注:最后,因为传回来的是一个时间戳,一般是一个很大的数字,如果你想产生一个指定范围内的数,可以利用 '%' 符号来实现。
如下:
小结:
在上面说了这么多,我们来简单总结一下,如何来使用rand函数来产生随机数。
需要使用到的函数:srand函数和time函数
需要引用的头文件:<stdlib.h>和<time.h>
最后,具体代码的实现:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand((unsigned int)time(NULL));
int guess = 0;
int rand_num = 0;
rand_num = rand() % 100 + 1;//随机产生一个1~100之间的数字。
printf("%d", rand_num);
do{
printf("请输入一个1~100之间的数字\n");
scanf("%d", &guess);
if (guess > rand_num) {
printf("猜大了!\n");
}
else if (guess < rand_num) {
printf("猜小了!\n");
}
else {
printf("恭喜你,猜对了\n");
break;
}
} while (guess);
return 0;
}
代码实现效果:
到这里,就写完了。