前言
今天,我们来玩猜数字游戏。猜数字游戏综合我们近期所学的循环、分支等语句,帮助我们巩固知识,同时还涉及随机数的生成、时间戳和一些库函数的认识,还有一些常见错误的分析。
要求
- 程序会提高菜单供你选择(玩/不玩)
- 随机数生成范围为1~100
- 猜数字,猜对、猜大、猜小都有提示
- 可以支持反复玩
思路
菜单
- 首先,你得提供一个菜单给读者选择。我们可以给一个函数,用来打印菜单,同时提供选项。
调用menu函数只是打印菜单,不用传参,不用返回。
- 因为游戏支持反复玩,这就涉及到我们的循环了,那用哪种循环?答案是do while。因为do while不管三七二十一,上来就是执行,我们把打印菜单的函数放在do whlie里面,这就方便我们每次循环都先打印菜单。同时提示输入数字。
这里可能就有人问:南木啊,你为啥把input定义在do while外面,为啥没写循环的判断条件?别急,慢慢来,后面会讲到。
- 根据选择,给予不同的回应,这时就得用我们学过的分支语句。那用哪种分支语句?用switch。用if也不是不可以,只是用switch更方便。
- 当你输入1时,进入函数(这个函数是用来写游戏部分的主要内容的)
- 当你输入0时,就退出游戏
- 当你输入其他数时,就重新选择
- 把input作为判断条件,就可以看出input的作用了。当它是0就结束选择,同时结束循环,程序结束,当它是非0,它就还在循环里面。这一切的前提就是input必须在do while外面,不然会因为input作用域问题而无法使用。
以上是主函数部分,接下来是游戏部分。
生成随机数。
- 首先介绍下生成随机数的函数rand
作用:生成一个随机数 参数:无 返回值:随机数 头文件:#include<stdlib.h> 随机数的范围:0~RAND_MAX(65535)
例子
但细心的朋友肯定会发现,程序每次执行得到的数字都是相同的。 如41、18467、6334等等。这是为什么?在rand函数介绍中,提到我们要使用srand。那么它的作用又是什么?
- srand函数的介绍和作用
作用:初始化随机数。 参数:seed是种子的意思。 返回值:无 头文件:#include<stdlib.h> 意思你传个无符号的种子过去,它给你设置一个固定随机值。这个种子可以是任意无符号的整形。
例子
这又是为什么? 在srand的介绍中提到,建议我们使用变化的值作为种子,这样我们每次调用函数时,初始化rand得到就是不同的值。 那如何得到一个变化的值?有朋友就说那就把rand()函数的返回值作为参数传给srand,你可真是个小天才。这样不就死循环了,是不允许的。 这就又又涉及一个新的知识点:时间戳。(放心,这个很容易理解)
- 时间戳
- time函数的介绍
作用:返回现在的时间即时间戳 参数:整形指针 返回值:时间戳 头文件:#include<time.h>
例子
大家又有了新的疑惑,为什么参数设置为NULL(空指针)?其实使不使用没关系,它照样会返回空指针。那为什么我们得到的随机数这么相近或者相等?这是因为我们每次调用game()函数都重新设置一个随机数生成器(srand(time(NULL)))。这时我们就得把srand函数放在主函数中,让它设置一个随机谁的起点就够了。
5. 提示猜数字,并且判断猜对,猜大还是猜小了
设置一个循环,只有当猜对了才跳出循环,不对的话就继续猜
- 获得1~100的数字
我们都知道数字太大得猜到猴年马月,那该如何获得1~100之间的的数字?很简单,只需把获得的数字%100+1即可。
%100一定会得到0~99之间的数,再加上1就是1 ~100之间的数。
搞了这么久,终于可以猜数字了,接下来是我们的测试环节。 很尴尬,我不知道怎么插入视频,所以我们还是看照片吧
今天的分享就到这了,如果还有什么不懂或者不对的地方,请评论告诉我,我会尽快回复,谢谢!
|