发布时间:2026/8/12 17:20:33
C语言梦开始的地方5:总结之猜数字 文章目录C语言梦开始的地方5总结之猜数字随机值与时间戳随机值生成时间戳猜数字代码实现随机数范围游戏菜单实现猜数字代码实现完整代码拓展游戏分享C语言梦开始的地方5总结之猜数字前四章我们了解了 C 语言的三大结构、关键字、操作符以及选择与循环语句。但单纯地学语法很难感受到这些知识点是如何配合使用的。本章我们就将前四章的知识点汇总起来实现一个简单的小游戏猜数字通过实际项目来检验前面的知识。游戏要求电脑自动生成1~100的随机数玩家猜数字猜数字的过程中根据猜测数据的大小给出大了或小了的反馈直到猜对游戏结束随机值与时间戳随机值生成猜数字我们首先让代码来生成一个随机数这样我们才能去猜而不是我们随便输入一个数来猜。C语言也给我们提供了一个函数rand这个函数是可以生成随机数的该函数的原型如下#include stdlib.h int rand(void);该函数生成的随机数是一个伪随机这个随机数的范围是0~RAND_MAX之间这个RAND_MAX的范围大小是根据编译器来定的大部分编译器上是32767。包含在stdlib.h这个头文件中。#includestdio.h#includestdlib.hintmain(){for(inti0;i5;i){printf(%d\n,rand());}return0;}但是运行该程序发现是生成了随机值但是连续运行我们发现随机值是一样的为什么会这样这是因为rand这俩次的随机种子都是一样的rand是确定性伪随机数生成器同样的种子 → 完全相同的完整序列并且你如果运行上述代码得出的结果是和我的大概率是一样的。因为rand的随机种子默认为1所以为了每次都不一样我们需要给rand每次重置它的随机种子同样C语言也提供了该函数srandsrand的函数原型如下void srand (unsigned int seed);它的作用就是每次运行去重置rand函数的随机种子程序中在调用 rand 函数之前先调用 srand 函数通过 srand 函数的参数seed来设置rand函数生成随机数的时候的种子只要种子在变化每次生成的随机数序列也就变化起来了。但是srand需要设置参数如果我们手动的去输入此时使不使用srand都没区别一样每次运行的值都是一样的。所以此时我们除了上述的rand和srand我们还需要一个函数time。时间戳那么我们想要每次都不一样我们就需要用到time函数time函数包含在time.h头文件中该函数的原型如下time_t time(time_t *timer)那么该函数是怎么做到的呢该函数是通过获取时间戳来实现的。timerNULL时得到当前日历时间从1970-01-01 00:00:00到现在的秒数timer时间数值时用于设置日历时间time_t是一个unsigned long类型。如果 timer不为空则返回值也存储在变量 timer中。时间戳是UNIX系统约定的从1970年的1月1日的0点0分0秒开始的时间。Linux和MaxOS就是继承该时间戳Windows内部使用的是从1601-01-01 作基准Win32 FILETIME只是 C 库帮你转换成 Unix 时间戳所以你在 time() 里看到的仍是 1970。配合上述的三个知识点我们去修改之前的代码#includestdio.h#includestdlib.h#includetime.hintmain(){// 因为这里time返回的参数是time_t的所以要强制转换成unsigned int类型srand((unsignedint)time(NULL));for(inti0;i5;i){printf(%d\n,rand());}return0;}猜数字代码实现我们通过上述函数得到了随机值后我们就可以开始来编写猜数字的代码了。首先我们要先分享该项目的代码要怎么来写猜数字的范围我们要在多少要怎么计算游戏开始菜单界面猜数字时给出提示分别是大了小了和找到了找到数字后是否继续游玩还是退出拓展是否需要提升难度比如要给次数如果在一定的次数内没有猜到给出惩罚。随机数范围生成0 ~ 99的随机数范围rand() % 100;生成1 ~ 100的随机范围rand() % 100 1;以此类推游戏菜单实现voidmenu(){printf(****************\n);printf( 1.开始游戏\n);printf( 0.退出游戏\n);printf(****************\n);printf(请选择:);}该代码我们发现不在main函数里面而是一个叫void menu()函数这是C语言的模块化设计也就是C语言的函数比如说该menu是专门负责界面的代码下面还有游戏实现的代码。void的意思就是无序返回值即不需要返回。主要是维护代码的可读性和可维护。后续我们会去系统的了解C语言函数这一章节。不写menu之间放在main函数里面也可以只是不好阅读代码这里我们可以使用goto来完成这种函数调用的方式但是不建议这样。goto在实际开发中使用的很少所以goto我们当时只作了解。这里提醒一点就是goto不能跨函数比如说我们在main函数里面写goto但是标签名在menu函数就会报错。猜数字代码实现主函数部分这里使用do······while是因为我们要去打开游戏才会选择到底玩不玩所以必须循环一次intmain(){intinput0;srand((unsignedint)time(NULL));do{menu();scanf(%d,input);switch(input){case1:game();break;case0:printf(退出游戏\n);break;default:printf(输入有误请重新选择\n);break;}}while(input);return0;}游戏部分voidgame(){intguess0;intret(rand()%100)1;while(1){printf(请输入你猜的数字(1~100):);scanf(%d,guess);if(guessret){printf(猜大了\n);}elseif(guessret){printf(猜小了\n);}else{printf(恭喜你猜对了答案是 %d\n,ret);break;}}}完整代码#includestdio.h#includestdlib.h#includetime.hvoidmenu(){printf(****************\n);printf( 1.开始游戏\n);printf( 0.退出游戏\n);printf(****************\n);printf(请选择:);}voidgame(){intguess0;intret(rand()%100)1;while(1){printf(请输入你猜的数字(1~100):);scanf(%d,guess);if(guessret){printf(猜大了\n);}elseif(guessret){printf(猜小了\n);}else{printf(恭喜你猜对了答案是 %d\n,ret);break;}}}intmain(){intinput0;srand((unsignedint)time(NULL));do{menu();scanf(%d,input);switch(input){case1:game();break;case0:printf(退出游戏\n);break;default:printf(输入有误请重新选择\n);break;}}while(input);return0;}拓展给游戏提高难度#includestdio.h#includestdlib.h#includetime.h#includewindows.hvoidmenu(){printf(****************\n);printf( 1.开始游戏\n);printf( 0.退出游戏\n);printf(****************\n);printf(请选择:);}voidgame(){intguess0;intret(rand()%100)1;intcnt5;while(cnt0){printf(请输入你猜的数字(1~100):);scanf(%d,guess);if(guessret){printf(猜大了\n);}elseif(guessret){printf(猜小了\n);}else{printf(恭喜你猜对了答案是 %d\n,ret);break;}cnt--;}if(cnt0){printf(你失败了正确值是:%d\n,ret);}}intmain(){SetConsoleOutputCP(65001);intinput0;srand((unsignedint)time(NULL));do{menu();scanf(%d,input);switch(input){case1:game();break;case0:printf(退出游戏\n);break;default:printf(输入有误请重新选择\n);break;}}while(input);return0;}这里也可以给一些惩罚比如调用Windows的关机命令或者其他命令或者其他惩罚都可以后续随着我们对C语言的了解深入还可以继续拓展该代码。游戏分享当我们写完该代码时我们想给其他人该怎么办有可能给的人没有C语言的编译环境那么他就无法运行并且我们还要给完整的源代码这和不方便那么有什么办法去解决呢如果你使用的是 Visual Studio切换成Release模式在Visual Studio顶部的工具栏中找到“解决方案配置”下拉菜单将Debug切换为Release。重新生成解决方案点击菜单栏的“生成” - “生成解决方案”。找到 .exe 文件打开你的项目文件夹进入 bin\Release 目录里面就是你需要的.exe文件。如果你使用的是 VSCode在VSCode中你需要通过命令行使用gcc编译器来生成.exe文件。打开终端在VSCode中点击“终端”(Terminal)菜单选择“新建终端”(New Terminal)。切换到代码目录在终端中使用cd命令切换到你的C语言源代码文件.c文件所在的目录。执行编译命令输入以下命令并回车gcc 你的源文件名.c-o你想要的名字.exe完

相关新闻

2026/8/12 17:20:33

C++类语法深度解析:从编译器视角理解类设计核心机制

1. 项目概述:为什么我们需要深入理解C类语法? 在C的世界里,“类”这个概念,就像建筑师的蓝图,是构建复杂、健壮软件系统的基石。无论是刚入门的新手,还是工作多年的老手,对类语法的理解深度&…

2026/8/12 17:15:33

学生课程汇报PPT,哪个AI工具最好用?我实测了6款,结论有点意外

又到了期末汇报季,朋友圈里哀嚎一片——“PPT做到凌晨三点”“排版排到怀疑人生”“模板翻了两小时还没找到合适的”…… 这场景我太熟了。做课程汇报这件事,说难不难,说简单吧——翻模板、搭框架、填内容、调字体、对齐元素,一套…

2026/8/12 18:20:39

深度揭秘东海县建设局网站:官方平台的功能、便民服务与改革成效全解析

最近有不少朋友在后台留言,问起关于咱们连云港东海县的建设局官网,也就是“东海县建设局网站”到底怎么用,上面能办什么事儿,还有那些冷冰冰的办事流程背后,到底藏着多少为了方便百姓的小心思。说实话,作为一个在本地摸爬滚打多年的“老东海”,我对这个平台真的是既爱又…

2026/8/12 18:20:39

武汉比较好的校友网管理软件推荐:选型标准与核验要点

校友组织管理软件选型的技术核验框架与架构分析校友组织管理系统的本质是一个面向多层级会员体系的关系数据管理平台(Relationship Data Management Platform),其技术架构需同时满足组织弹性、数据主权、流程闭环与接口开放性四项核心约束。本…

2026/8/12 18:15:37

我做了一款 Windows 本地同声传译软件

最近一直在开发一款 Windows 本地同声传译软件,名字叫 Coollate。 它目前解决的核心问题非常直接: 用户说中文,软件实时生成中文原文、英文字幕,并自动播放英文译音。 翻译后的英文声音不仅可以从扬声器或耳机播放,还…

2026/8/12 10:37:12

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/12 5:35:25

当 LLM 遇见大文档:主流开源项目如何处理上下文超限

从 Agentic Loop 到 Repo Map,七种策略与六类陷阱引言:128K vs 10MB 的硬冲突 2026 年的 LLM 上下文窗口已达到 128K ~ 1M token(≈ 0.5MB ~ 4MB 文本),但 LLM 想要处理的真实数据规模远远超过这个量级:真实…

2026/8/12 9:34:08

Ubuntu 23.10中双击运行.sh文件的完整指南:从权限原理到桌面配置

1. 项目概述:从一次“双击”引发的权限探索在Ubuntu桌面环境下,我们习惯了双击运行那些带有.exe后缀的Windows程序安装包,但当你拿到一个以.sh结尾的Shell脚本文件时,满怀期待地双击它,却很可能只看到一个文本编辑器窗…

2026/8/12 9:34:08

NumPy条件索引实战:np.where与np.argwhere高效数据筛选指南

1. 从一次数据筛选的“笨办法”说起 前几天,我帮一个刚入行的数据分析师同事看代码,他正在处理一批传感器数据,需要找出所有温度超过阈值的数据点,然后进行后续分析。我一看他的实现,好家伙,一个 for 循环…

2026/8/12 9:34:08

基于Docker与Selenium Grid构建高可用浏览器自动化测试环境

1. 项目概述:为什么需要容器化的浏览器自动化?在软件开发和测试领域,浏览器自动化早已不是新鲜事。无论是日常的UI回归测试、数据抓取,还是复杂的业务流程模拟,Selenium都是我们绕不开的利器。然而,但凡在团…

2026/8/10 11:20:30

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/11 17:06:59

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/11 3:05:11

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…