【C语言】产生一个随机数的方法的详解

目录

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;
}

 代码实现效果:

 到这里,就写完了。