尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
【C语言】实现趣味猜数字小游戏
目录一、游戏介绍二、如何生成随机数1.rand函数2.srand函数3.time函数4.综合以上知识我们可以做到让程序每次运行都生成不同的1~100之间的随机数的操作具体代码如下三、整体参考代码四、其他小功能1、在用户输入之后更新范围并输出以提示用户2、让游戏变得更刺激些——限制用户输入次数五、完整版代码一、游戏介绍猜数字小游戏是一个经典的代码练习题目今天我们要通过C语言实现猜数字小游戏 。游戏过程1、电脑生成一个 1~100 范围内的随机数2、玩家猜数字电脑根据玩家的输入给出反馈猜大或猜小直到玩家猜对游戏结束。二、如何生成随机数1.rand函数在C语言中有一个 rand 函数可以生成随机数生成的随机数范围是0~32767使用rand函数需要包含 stdlib.h 头文件可以通过以下方法生成 a~b 范围内的随机数a rand() % ( b - a 1 ) //生成 a~b 范围内的随机数接下来我们测试一下rand函数#includestdio.h #includestdlib.h int main() { printf(%d\n, rand()); printf(%d\n, rand()); printf(%d\n, rand()); printf(%d\n, rand()); printf(%d\n, rand()); return 0; }运行结果根据运行结果我们可以发现使用rand函数生成的随机数是伪随机每次运行后生成出的数字都相同。通过查阅资料可以知道rand函数是对一个叫“种子”的基准值进行运算生成的随机数,而在C语言中rand函数默认的基准值为1。因此我们需要使用另一个函数srand。2.srand函数srand函数可以用来初始化随机数生成器。srand需要传入一个 unsigned int 类型的数作为rand生成随机数的种子。在程序中一般使用 time 函数获取时间作为种子。注srand函数不需要频繁调用每次运行程序时调用一次就足够了3.time函数time函数会返回一个时间戳即从1970年1月1日到程序运行时间之间的秒数。返回类型为time_t类型本质上是32位或64位的整型类型。time函数的参数如果是非NULL指针就会把返回的时间戳放到指针指向的内存中带回去如果参数为NULL就只返回这个时间戳。使用time函数需要包含头文件 time.h4.综合以上知识我们可以做到让程序每次运行都生成不同的1~100之间的随机数的操作具体代码如下#includestdio.h #includestdlib.h #includetime.h int main() { srand(time(NULL)); printf(%d\n, (rand()%1001)); return 0; }三、整体参考代码头文件#includestdio.h #includestdlib.h #includetime.h为了提高代码的可读性可以把打印菜单和猜数字的部分封装成函数void menu() //定义菜单函数 { printf(**********************\n); printf(****** 1.开始 ******\n); printf(****** 0.退出 ******\n); printf(**********************\n); }定义一个猜数字函数并根据用户输入做出反馈。当用户输入的数字和电脑生成的随机数相同时使用 break 跳出循环。void game() //猜数字部分 { int num rand() % 100 1; int guess 0; while(1) { printf(请输入数字:); scanf(%d,guess); if (num guess) { printf(很遗憾你猜小了\n); } else if (num guess) { printf(很遗憾你猜大了\n); } else { printf(恭喜你猜对了\n); break; } } printf(游戏结束); }由于在菜单下方选择选项的操作至少要做一次因此我们选择 do...while 循环并在 do...while 循环中打印菜单使用 switch 对不同的输入进行反馈。int main() { srand(time(NULL)); //初始化随机数生成器 int input 0; do { menu(); //调用菜单函数打印菜单 printf(请选择:); scanf(%d, input); switch (input) { case 0: printf(游戏结束\n); break; case 1: game(); break; default: printf(输入错误请重新输入\n); break; } } while (input); return 0; }四、其他小功能1、在用户输入之后更新范围并输出以提示用户void game() //猜数字部分 { int num rand() % 100 1; int max 100; int min 1; //定义最大值和最小值并分别赋值为100,1 int guess 0; while(1) { printf(请输入数字:); scanf(%d,guess); if (num guess) { if (guess min) //将用户输入与最小值比较避免因用户输入问题导致范围变大 min guess; //当用户输入的数偏小就将用户输入的数复制给最小值并输出 printf(很遗憾你猜小了。当前范围( %d , %d )\n,min,max); } else if (num guess) { if (guessmax) //将用户输入与最小值比较避免因用户输入问题导致范围变大 max guess; //当用户输入的数偏大就将用户输入的数复制给最大值并输出 printf(很遗憾你猜大了。当前范围( %d , %d )\n, min, max); } else { printf(恭喜你猜对了\n); break; } } printf(游戏结束); }2、让游戏变得更刺激些——限制用户输入次数void game() //猜数字部分 { int count 5; //定义 count 并初始化为 5 表示用户共有 5 次输入机会 int num rand() % 100 1; int guess 0; while (count) //将函数循环条件改为 count 当 count 减为 0 时停止循环 { printf(你还有 %d 次机会请输入数字:,count); //在用户输入前打印剩余次数 scanf(%d, guess); if (num guess) { printf(很遗憾你猜小了\n); } else if (num guess) { printf(很遗憾你猜大了\n); } else { printf(恭喜你猜对了\n); break; } count--; //用户每次输入之后次数减一 } printf(游戏结束); }五、完整版代码#define _CRT_SECURE_NO_WARNINGS 1 //猜数字游戏 #includestdio.h #includestdlib.h #includetime.h void menu() //定义菜单函数 { printf(**********************\n); printf(****** 1.开始 ******\n); printf(****** 0.退出 ******\n); printf(**********************\n); } void game() //猜数字部分 { int count 5; //定义 count 并初始化为 5 表示用户共有 5 次输入机会 int max 100; int min 1; //定义最大值和最小值并分别赋值为100,1 int num rand() % 100 1; int guess 0; while (count) //将函数循环条件改为 count 当 count 减为 0 时停止循环 { printf(你还有 %d 次机会请输入数字:, count); //在用户输入前打印剩余次数 scanf(%d, guess); if (num guess) { if (guess min) //将用户输入与最小值比较避免因用户输入问题导致范围变大 min guess; //当用户输入的数偏小就将用户输入的数复制给最小值并输出 printf(很遗憾你猜小了。当前范围( %d , %d )\n, min, max); } else if (num guess) { if (guess max) //将用户输入与最小值比较避免因用户输入问题导致范围变大 max guess; //当用户输入的数偏大就将用户输入的数复制给最大值并输出 printf(很遗憾你猜大了。当前范围( %d , %d )\n, min, max); } else { printf(恭喜你猜对了\n); break; } count--; //用户每次输入之后次数减一 } printf(游戏结束); } int main() { srand(time(NULL)); //初始化随机数生成器 int input 0; do { menu(); //调用菜单函数打印菜单 printf(请选择:); scanf(%d, input); switch (input) { case 0: printf(游戏结束\n); break; case 1: game(); break; default: printf(输入错误请重新输入\n); break; } } while (input); return 0; }感谢观看
RELATED

相关推荐

TI芯片PRCM模块实战:MPU、ECC与时钟配置详解

TI芯片PRCM模块实战:MPU、ECC与时钟配置详解

1. 项目概述与核心价值在嵌入式系统,尤其是汽车电子和工业控制这类对可靠性、实时性要求严苛的领域,芯片的稳定运行绝非偶然。它依赖于一套精密、可控的底层硬件管理机制,而电源、复位与时钟(Power, Reset, and Clock Management&…

📅 2026/8/23 11:24:26
深入解析TI OMAP I2C控制器:时钟、电源、中断与DMA底层机制

深入解析TI OMAP I2C控制器:时钟、电源、中断与DMA底层机制

1. 项目概述:为什么需要深入理解I2C控制器的底层管理机制?在嵌入式系统开发,尤其是基于复杂SoC(如TI OMAP系列)的设计中,I2C总线是我们连接传感器、EEPROM、PMIC等外设的“血管”。大多数开发者对I2C的应用…

📅 2026/9/8 17:56:22
单总线多器件ROM码搜索算法优化与实践

单总线多器件ROM码搜索算法优化与实践

1. 单总线多器件ROM码搜索算法概述在嵌入式系统和物联网设备中,单总线(1-Wire)技术因其简单的硬件连接和低成本特性被广泛应用。当一条总线上挂载多个1-Wire器件时,每个器件都拥有全球唯一的64位ROM码,如何高效识别这些…

📅 2026/7/30 7:47:39
MORE NEWS

更多资讯

📰

opencode不是开源项目,而是AI编程代理工具的本地运行时环境

1. “opencode”不是开源项目,而是AI编程代理工具的误传代称——先破除一个广泛存在的认知偏差“opencode”这个词在最近三个月的开发者社区里高频出现,但它既不是GitHub上某个star过万的开源仓库,也不是Linux基金会或Apache软件基金会旗下的…

📰

SolidWorks研发设计库搭建指南:从标准件到焊件库的完整实践

做机械设计这行,SolidWorks基本是绕不开的工具。但很多人电脑里装的SolidWorks,用了一两年还停留在画图阶段:每次做螺栓连接,都去零件库翻半天;每次画铝型材框架,都要重新拉截面草图;每次新项目…

📰

Uber开源代码审查工具uReview:规则即代码,重塑PR审查流程

提到“Uber uReview代码审查”这个项目名,很多人的第一反应是:Uber不是做打车的吗,怎么跑去搞代码审查工具了?其实Uber内部的技术氛围一直很浓,很多工程实践和工具链都相当扎实,uReview就是他们开源出来的一…

📰

Tabbed Postman REST Client离线包安装与使用:轻量REST API调试工具指南

简介:一款运行于谷歌浏览器上的 Postman REST 客户端插件离线安装包,版本为 v0.8.4.19,主要面向前端、后端开发及接口调试人员,解决在线安装受网络限制、版本源不稳定或内网隔离环境下的工具部署问题。压缩包采用 zip 格式&#x…

📰

SpringBoot+Vue+MySQL选课系统全栈开发实战:从设计到部署

前几天一个学弟找我,说学校课设要求做个信息管理系统,他选了“学生选课系统”这个题,但网上翻了一堆源码不是缺胳膊少腿就是跑不起来。我直接给他发了一套SpringBoot Vue MySQL的完整项目,解压、配置、启动,前后端加…

📰

十字封箱机选型分析:什么时候该选、怎么选、有哪些坑

一、现状:十字封箱机的市场定位与行业基本面1. 封箱机市场持续增长,十字封箱机需求占比高据行业公开运营数据显示,2025年国内智能封箱机市场规模同比增长约11.7%,其中十字封箱机/折盖封箱机/封箱机的需求占比超62%(来源…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬