当前位置:   article > 正文

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

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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这里插入图片描述
大家可以看到生成的数是随机的了,但是这里有一个问题,作者没办法把录屏放到博客上,所以看不到直观现象,读者可以把这段代码复制在自己的编译器上运行几篇可以发现,每次生成随机数的结果是一致的,那这样随机数不久不随机了??并且生成的随机数只在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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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

注意:我们在使用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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57

我们在game()函数里面看到while循环是你猜的数,我们千万不能把rand函数放在while里面不然每次猜的时候都生成一个随机数,这样永远都猜不到,rand%100+1是因为余数最多为99在加以就是100了,srand函数在一次程序运行时只需要调用一次就好了,所以放在一开始就好了。
在这里插入图片描述

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

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

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

在这里插入图片描述

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号