【C语言】-想要知道如何获得随机数吗??那还不赶快进来!!!

作者:低调
作者宣言:认真写好每一篇博客
作者gitee:link
【C语言】-想要知道如何获得随机数吗??那还不赶快进来!!!_第1张图片

前言

今天作者又来更新好文了,今天我们就讲计算机时怎么生成随机数字的,并且在设计一个猜数字小游戏,来达到实践的目的,接下来进入正文:

在这里插入图片描述一、如何生成随机数

这里我们需要使用到一个函数rand(),这是一个生成随机数的函数,我们来具体看他的用途:
【C语言】-想要知道如何获得随机数吗??那还不赶快进来!!!_第2张图片

我们可以看到rand函数是一个无参的,返回int整型数据。他需要的头文件是,让我们来看一下代码和运行截图

#include
#include
#include
int main()
{
	while (1)//循环时为了看到多次随机生成的数
	{
		int ret = rand();//生成随机数,用ret来接收
		printf("%d\n", ret);
		Sleep(1000);//这是一个睡眠函数,单位时毫秒
	}
	return 0;

【C语言】-想要知道如何获得随机数吗??那还不赶快进来!!!_第3张图片
大家可以看到生成的数是随机的了,但是这里有一个问题,作者没办法把录屏放到博客上,所以看不到直观现象,读者可以把这段代码复制在自己的编译器上运行几篇可以发现,每次生成随机数的结果是一致的,那这样随机数不久不随机了??并且生成的随机数只在0-RAND_MAX之间
【C语言】-想要知道如何获得随机数吗??那还不赶快进来!!!_第4张图片
大家可以看到RAND_MAX是一个32767的数。那我们怎末解决这个问题呢,其实在使用这个函数之前,我们再来看看rand这个函数使用还需要哪些条件
在这里插入图片描述

画红线的地方提示我们,在使用之前需要一个srand()函数,那我们再来看看srand()怎么使用的吧:

【C语言】-想要知道如何获得随机数吗??那还不赶快进来!!!_第5张图片
我们看到返回值是空类型,所以没有返回值,参数是一个无符号整型unsigned int,为什么在使用rand之前之前,要使用这个函数呢,因为这个函数是用来设置随机数生成器的。那我们来看代码理解一下。
【C语言】-想要知道如何获得随机数吗??那还不赶快进来!!!_第6张图片
【C语言】-想要知道如何获得随机数吗??那还不赶快进来!!!_第7张图片

看这两次运行结果,虽然结果不一样了,但还是有问题,如果srand里面的参数不变,他每次生成的随机数还是和上次一样,如果多次运行程序,那生成的就不是随机数了,所以我们需要使srand里面的参数随机就行了,我们需要生成随机数啊,为什么参数还需要随机数啊,这不就矛盾了吗,不要慌,我们这个时候就要引入时间戳这个概念。

【C语言】-想要知道如何获得随机数吗??那还不赶快进来!!!_第8张图片

只有时间是一直在改变的,我们就要用到time这个函数,他的返回值就是返回一个时间戳的值

【C语言】-想要知道如何获得随机数吗??那还不赶快进来!!!_第9张图片

这里的参数是一个指针类型,我们目前在使用这个之前只需要传一个NULL就好了。我们只需要知道怎么使用就好了,不需要过多的研究他。

来看代码:

#include
#include
#include
int main()
{
	srand((unsigned int)time(NULL));
	while (1)//循环时为了看到多次随机生成的数
	{
		int ret = rand();//生成随机数,用ret来接收
		printf("%d\n", ret);
		Sleep(1000);//这是一个睡眠函数,单位时毫秒
	}
	return 0;
}

【C语言】-想要知道如何获得随机数吗??那还不赶快进来!!!_第10张图片
【C语言】-想要知道如何获得随机数吗??那还不赶快进来!!!_第11张图片
这是两次运行的截图,大家看到,结果不一样了,你不管运行几次,生成的随机数都是不一样的,这样是不是就很好的解决这个问题了。

注意:我们在使用rand函数之前的srand只需要调用一次,如果把srand函数放到循环里面就会出现问题
【C语言】-想要知道如何获得随机数吗??那还不赶快进来!!!_第12张图片
这些数字好像又不是随机的,因为每次调用,srand里面的参数重新改变,并且时间是一点一点往上涨,也就相当于每次都重新设置起点,达不到随机的效果。

在这里插入图片描述二、猜数字小游戏

我们需要在1-100之前猜数字
先来看代码:

#include 
#include 
#include 
void menu()
{
	printf("**********************************\n");
	printf("*********** 1.play    **********\n");
	printf("*********** 0.exit    **********\n");
	printf("**********************************\n");
}
//RAND_MAX--rand函数能返回随机数的最大值。
void game()
{
	int random_num = rand() % 100 + 1;
	int input = 0;
	while (1)
	{
		printf("请输入猜的数字>:");
		scanf("%d", &input);
		if (input > random_num)
		{
			printf("猜大了\n");
		}
		else if (input < random_num)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
	}
}
int main()
{
	int input = 0;
	srand((unsigned)time(NULL));
	do
	{
		menu();
		printf("请选择>:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			break;
		default:
			printf("选择错误,请重新输入!\n");
			break;
		}
	} while (input);
	return 0;
}

我们在game()函数里面看到while循环是你猜的数,我们千万不能把rand函数放在while里面不然每次猜的时候都生成一个随机数,这样永远都猜不到,rand%100+1是因为余数最多为99在加以就是100了,srand函数在一次程序运行时只需要调用一次就好了,所以放在一开始就好了。
【C语言】-想要知道如何获得随机数吗??那还不赶快进来!!!_第13张图片

读者可以自己下去玩玩这个小游戏。

在这里插入图片描述三、总结

在这里插入图片描述今天我们学会如何生成了一个随机数,并且还实现了一个猜数字的小游戏,我们知道了每个函数都有特定的功能,并且也了解他的重要性,如果读者有什么不懂的问题可以随时评论,我会及时答疑,如果有写的不对的地方,也希望大佬指出来,作者会及时改正。最后希望大家多多支持我

你可能感兴趣的:(关于C语言的一切,c语言,c++,算法)