尧图网络 高端网站定制 · 原创设计
免费咨询热线
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/10/7 16:30:30
深入解析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/10/8 21:07:09
MORE NEWS

更多资讯

📰

沈阳建筑行业电工证多久拿证?工地太忙根本没时间复习考试怎么办?

沈阳建筑行业电工证多久拿证?工地太忙根本没时间复习考试怎么办? 工地太忙根本没时间复习考试,是不是你的真实写照?尤其是在沈阳建筑行业,电工证几乎是每个项目必不可少的“入场券”,但很多电工因为工作节奏快、时间紧张,根本抽不出空来备考,甚至不知…

📰

义乌安监局电工证办理2026河南最新政策下如何快速上岗

义乌安监局电工证办理2026河南最新政策下如何快速上岗 你现在正坐在电脑前,脑子里盘算着怎么才能尽快拿到电工证,早点上岗赚钱。但问题来了: 义乌安监局电工证办理…

📰

工地太忙根本没时间复习考试?人才市场中级电工证值不值得考

工地太忙根本没时间复习考试?人才市场中级电工证值不值得考 工地太忙根本没时间复习考试,这话我懂。每天扛着工具满工地跑,哪还有闲工夫坐在电脑前刷题?但别小看这个“人才市场中级电工证”,它不仅关系到你能不能上岗,还影响着你未来的薪资和职业发展空…

📰

奎屯电工证多少钱?真实经历告诉你别白交培训费

奎屯电工证多少钱?真实经历告诉你别白交培训费 怕考不过白交培训费?这事儿我懂,身边好多朋友就是这么踩坑的。我认识一个在洛阳涧西区工地干活的老李,去年花了一万多块钱报了电工证培训,结果考试没过,钱打了水漂,还耽误了工期。这种事在特种作业证报考…

📰

工地太忙根本没时间复习考试,良心建议帮你搞定人才市场中级电工证

工地太忙根本没时间复习考试,良心建议帮你搞定人才市场中级电工证 你是不是也在工地忙得连轴转,天天盯工、盯人、盯进度,根本没有时间复习考试?别急,我来给你一个 良心建议 —— 人才市场中级电工证…

📰

徐汇区电工证怎么转?良心建议帮你避开这些坑

徐汇区电工证怎么转?良心建议帮你避开这些坑 之前考的证在外省能不能转过来?这个问题困扰了太多人,尤其是像我这样在外地工作多年、现在回到上海徐汇区想继续干电工的朋友。说实话,刚开始我也一头雾水,不知道怎么操作。今天就来分享我的亲身经历,希望能…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

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

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

📞 💬