//电脑产生一个随机数(1~100)
//反馈:猜大了或者猜小了#include<stdio.h>
#include<time.h>
#include<stdlib.h>void menu()
{printf("******************************\n");printf("********    1.play    ********\n");printf("********    0.exit    ********\n");printf("******************************\n");
}void game()//游戏主体
{int guess = 0;//生成随机数int ret = rand() % 100 + 1;//生成随机函数,范围为0~RAND_MAX(32767);while (1){printf("请猜数字:");scanf("%d", &guess);if (guess < ret){printf("猜小了\n");}else if (guess > ret){printf("猜大了\n");}else{printf("恭喜你,猜对了!\n");break;}}
}int main()
{int input = 0;srand((unsigned int)/*强制转换为int*/time(NULL));//NULL空指针//循环选择do{menu();printf("请选择:");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择错误,重新选择\n");break;}} while (input);return 0;
}

猜数字小游戏是学习代码非常基础也非常经典的一款小游戏,接下来我将详细介绍程序的实现过程。

在主函数中,我们主要实现游戏的开始与退出,此时我们使用switch()函数实现游戏功能的选择(分支结构)。同时,为了让游玩者至少做出一次选择,并在游戏结束后,为了再次让游玩者做出选择,我们使用do while()函数(循环结构)

接下来,让我们将目光放到game()函数中,这也是整段代码最重要的部分。为了猜一个数字,首先我们需要生成一个随机数,此时我们将使用rand()函数,其作用为Generates a pseudorandom number(生成一个伪随机数),下图为rand()函数的具体使用方法:

注意!下面有句话,The rand function returns a pseudorandom integer in the range 0 to RAND_MAX. 意思是rand()函数将会返回一个范围0~RAND_MAX的伪随机数。有读者就会问:晓铭晓铭,RAND_MAX的大小是多少啊?看下图:

RAND_MAX的大小为0x7fff,而这是一个十六进制的数,我们打开电脑自带的计算机进行换算,结果为下图:

折腾了这么久,我们终于得出,rand()函数所返回的伪随机数的范围为0~32767。这时会有动手能力强的读者会说:晓铭晓铭,rand()函数的返回值在第一次的时候确实是随机的,但也只是第一次是。为什么这么说呢,原来是因为第一次和第二次所给出的数字与顺序是完全相同的。

这是便涉及到rand()函数定义中的另外一句话: Use the srand function to seed the pseudorandom-number generator before calling rand.在调用rand之前,使用srand函数来播种伪随机数生成器。其作用为Sets a random starting point.(设置一个随机的起点),下图为srand()函数的具体使用方法:

即我在主函数main中所编写的srand((unsigned int)time(NULL));此时又涉及到一个新的函数time(),其作用为Gets the system time.(获取系统时间),下图为time()函数的具体使用方法:

想必已经有读者猜到晓铭为什么要获取系统时间了,原因其实很简单,因为时间是不停在变换的。The time function returns the number of seconds elapsed since midnight (00:00:00), January 1, 1970, coordinated universal time, according to the system clock. 时间函数返回自系统时钟指示下的1970年1月1日午夜(00:00:00)以来所经过的秒数。这样就可以通过srand函数来设置rand函数的起点。

需要注意的是,The return value is stored in the location given by timer. This parameter may be NULL, in which case the return value is not stored.返回值存储在计时器给出的位置中。此参数可以为NULL,在这种情况下,不存储返回值。所以我们在time函数中填入NULL(空指针)。并且因为srand函数所需要的参数为无符号整型,所以我们使用unsigned int强制将time函数的返回值转换为整型(时间不可能为负数)。

这样我们就完美解决了随机数生成的问题,再通过if else函数进行判断,while函数进行循环,直到猜中随机数,使用break退出循环。

代码到这里基本就结束了,最后,希望你们,也希望自己越来越优秀......

C语言 猜数字游戏 VS2022相关推荐

  1. C语言—猜数字游戏的实现

    目录 目录 完整的程序 打印菜单 主函数部分 生成随机数 猜数字函数的实现 我们已经学习到了C语言的一些基本知识和分支循环语句了,可以自己动一动手来尝试实现C语言-猜数字游戏了,为了猜数字程序的实现, ...

  2. C语言猜数字游戏(详解)

    使用C语言写出猜数字游戏 1.思路 1.我们需要电脑生成一个随机数 2.玩家进行猜数字 3.玩过一次可以再玩一次,那么至少要进去一次,可以使用do...while循环 2.大体结构(主函数) 使用do ...

  3. c语言猜数字游戏用while,用C语言实现猜数字游戏

    本文实例为大家分享了C语言实现猜数字的具体代码,供大家参考,具体内容如下 问题:计算机随机生成一个数字,用户进行猜数字,当用户猜错时,提醒用户猜高/猜低,直到用户猜的数字与计算机给的随机数一致时,提示 ...

  4. 【趣学】C语言猜数字游戏

    目录 一.前言 二.从游戏初始界面开始 三.游戏实现 ①rand函数 ②srand函数 ③时间戳 ④time函数 一.前言 学习的过程有时候会有些许枯燥,但换一种方式学习也算是一种有趣的事情,呀哈,写 ...

  5. 【小白系列】C语言 猜数字游戏

    目录 1.前言 2.编写思路 3.代码实现 3.1菜单代码 3.2游戏代码 3.2-1 rand函数 3.2-2 srand 函数 3.2-3 time函数 4.注意事项 5.完整的猜数字游戏代码展示 ...

  6. C语言 猜数字游戏

    猜数字游戏 规则:给定一个范围如[1,100],系统生成一个范围内随机数字,用户随便输入一个整数,如果用户输入的数字比系统生成的数字小就提示"猜低了",如果用户输入的数字比系统生成 ...

  7. c语言猜数字游戏用while,【C语言基础】有趣的猜数字游戏。(while循环,if语句,switch语句)...

    要求:猜数字游戏的实现.代码如下:#include #include #include void menu() { printf("***************************** ...

  8. c语言猜四位数游戏猜10次,C语言猜数字游戏--随机生成4个不相同的数字从小到大排序,用户开始游戏,如果用户猜对数字和数字对应的位置,界面回馈A,如果数字正确位置不正确,则回馈B...

    1.看程序运行截图吧!! 由于博主本人较笨,就不动画演示了,如果动画的话可能将是一个漫长的过程! 猜数字游戏.png 2.游戏题目 随机生成4个不相同的数字从小到大排序,用户开始游戏,如果用户猜对数字 ...

  9. c#语言猜数字游戏,C#实现猜数字游戏

    本文实例为大家分享了C#实现猜数字游戏具体代码,供大家参考,具体内容如下 给定一个0-100的随机数字猜其大小 题目样式: 电脑产生一个0到100之间的随机数字,并且要求用户来猜,如果用户猜的数字比这 ...

最新文章

  1. MySQL安装过程启动mysqld_safe中提示的pid ended错误导致无法启动问题处理
  2. linux双网卡绑定实现冗余与负载均衡
  3. OpenCL2.0特性之SVM
  4. 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexFile loadDexFile 函数 | 构造函数 | openDexFile 函数 )
  5. BOOL,int,float,指针变量 与“零值”比较
  6. MySQL修改存储过程(ALTER PROCEDURE)
  7. [BOI2019][第K大问题][暴力剪枝]D2T1 Olympiads
  8. 电脑开两个微信_电脑怎么登录两个微信
  9. jmeter模拟登陆
  10. CNN图像分类Keras代码转换pytorch思路与实现
  11. 大家可以放心了!Redmi K20将配备双频GPS
  12. python可以处理哪些文件_Python(文件处理)
  13. oracle设置自增字段,oracle序列
  14. sqlite报错database is locked
  15. 航飞影像的GPS坐标导出、修改、写入(EXIF信息)
  16. DDD的哲学意味(上)
  17. 云计算云存储的一些基本概念
  18. 计算机类高级工程师职称评审
  19. c语言父子线程交替打印,多线程面试题之【三线程按顺序交替打印ABC的方法】...
  20. Android仿微信语音聊天

热门文章

  1. 【元胞自动机】基于matlab元胞自动机模拟SEIR传播模型和采取隔离措施的SEIR模型【含Matlab源码 2181期】
  2. 无线音频优劣分析king-chip--5.8G无线音频技术和2.4G无线音频技术
  3. 操作PNG图片的Chunks
  4. Google AdSense即日起支持中国本地付款 西联汇款免费!
  5. IP访问控制列表配置
  6. matlab中randn输出值,Matlab中randn函数和normrnd函数的使用,以及max返回最值
  7. 四年级计算机上册计划书,小学四年级数学上册教学计划书
  8. Microsoft Remote Desktop 10.2.9(1575) Mac 优秀的远程桌面工具
  9. 1/2+2/3+3/5+5/8+......数列前10项求和
  10. NR 物理层编码 卷积码8-slide