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

作者:低调
作者宣言:认真写好每一篇博客
作者gitee:link
在这里插入图片描述

前言

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

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

这里我们需要使用到一个函数rand(),这是一个生成随机数的函数,我们来具体看他的用途:
在这里插入图片描述

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

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

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

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

在这里插入图片描述
我们看到返回值是空类型,所以没有返回值,参数是一个无符号整型unsigned int,为什么在使用rand之前之前,要使用这个函数呢,因为这个函数是用来设置随机数生成器的。那我们来看代码理解一下。
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

来看代码:

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

在这里插入图片描述
在这里插入图片描述
这是两次运行的截图,大家看到,结果不一样了,你不管运行几次,生成的随机数都是不一样的,这样是不是就很好的解决这个问题了。

注意:我们在使用rand函数之前的srand只需要调用一次,如果把srand函数放到循环里面就会出现问题
在这里插入图片描述
这些数字好像又不是随机的,因为每次调用,srand里面的参数重新改变,并且时间是一点一点往上涨,也就相当于每次都重新设置起点,达不到随机的效果。

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

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

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
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函数在一次程序运行时只需要调用一次就好了,所以放在一开始就好了。
在这里插入图片描述

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

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

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

在这里插入图片描述

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘柚!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值