手把手教你C语言基础:猜字小游戏,你知道怎么恶搞你的朋友吗?【详解+源码】

今天写一个简单的猜数字小游戏,并且告诉你怎么来恶作剧你朋友的电脑,一定要用你朋友的电脑哦~,同样如果有什么错误希望能指出来,或者有什么改善的可以告诉给我,非常感谢大家的反馈!!!


一.猜数字游戏想要实现的功能

1.使电脑随机生成1~100之间的随机数

2.猜数字

如果猜小了,电脑提示猜小了。

如果猜大了,电脑提示猜大了。

如果猜对了,电脑提示:恭喜你,猜对了,游戏结束。

然后游戏玩完一次之后可以选择是否继续玩。


二.怎么生成随机数?

1.rand函数

C语言rand函数可以生成随机数,它既然是个函数,就得有头文件,它的头文件是stdlib.h


在这里插入图片描述


但是rand函数会返回一个伪随机数,它不是真正的随机数,而是计算机经过算法而返回的一个随机数。

OK,当我们用rand函数生成一个随机数时:
​​​​​​在这里插入图片描述

再多弄几个随机数:

在这里插入图片描述

可是等我们再次运行一次发现生成随机数序列跟上次执行结果一样:

在这里插入图片描述

但是对于我们来说随机数是我们永远不会知道下一个数字是什么。

如果我们知道下一个数字是什么,那这个游戏就可太简单了,只要背住数字就可以顺利通关了,所以它一定是有问题的,这时候我们就要引入一个"种子"的概念。


三.怎么生成变化的"种子"?

rand的函数它是对一个叫种子的基准值进行运算生成的随机数,由于rand函数生成随机数默认种子为1,所以每次运行程序生成的随机数序列是一样的,

如果我们想要每次生成不一样的随机数,那么就要让种子变化,同样我们每次生成的随机数序列也就变化了,这就是我们想要的。

那怎么让种子发生变化呢?

C语言中提供了一个函数叫srand,它是用它的参数seed来改变rand函数生成随机数的种子。
在这里插入图片描述

当我们设置这个函数运行一下,它生成的随机数序列确实跟上次不一样了:

在这里插入图片描述

可是当我们再次运行时,同样的情况又发生了,跟上次运行结果一样,随机数序列没发生改变,这还不是我们想要的:

在这里插入图片描述

这时我们意识到,如果想要每次运行得到不同的随机数序列,那么srand函数参数就要时刻发生变化,也就是括号里面的数字每次调用时要发生变化,这样我们就可以得到想要的随机数了。

这时候我们就要引入一个叫time的函数,它的头文件time.h,也就是时间,这个函数可以获得时间,我们知道时间是在无时无刻变化着的,它就是我们设计种子的最佳选择


四.时间戳

在这里插入图片描述

其实time的函数获得的时间叫时间戳,在这里我要介绍一下什么是时间戳。

​​在这里插入图片描述

时间戳,是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数(不考虑闰秒),用于表示一个时间点。然而,这种格式对于人类阅读并不友好,因此需要转换成可读的日期和时间格式。这个工具能够将时间戳快速转换为人类可读的日期时间格式,同时也支持反向转换,即将日期时间转换为时间戳。

我们来看time的原型,它的括号里面叫指针,由于我自己本身知识有限,不能讲解,不过不影响我们下面的操作,由于我们只想要time的返回值,所以在括号里面可以加一个NUll,它是一个空指针,就不关心它的参数了, 只要它的返回值,得到时间戳。

这时候我们可以看设计的随机种子:

在这里插入图片描述

这个time函数前面的括号是强制类型转换,是由于函数time返回值和srand函数是不同类型的原因,srand函数要接受time的返回值,所以要进行强制类型转换。

当我们再次运行两次来看时,它们运行的结果随机数序列是不一样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值