当前位置: 首页 > news >正文

C语言实战:从零实现猜数字小游戏

目录

前言

一、核心前置知识:随机数生成原理

1. 三个关键函数 | 函数 | 头文件 | 作用说明 |

2. 自定义随机数范围公式

二、完整游戏代码解析

三、代码分层拆解

1. `game()`函数:单次猜谜逻辑

2. `main()`函数:游戏菜单框架

运行演示效果

四、踩坑总结与优化建议

常见坑点

进阶优化方向

五、学习收获


前言

初学C语言分支与循环时,猜数字游戏是经典练手项目,既能吃透`rand/srand/time`随机数三件套,又能熟练`while/ do-while/ switch`分支循环语法。本文结合手写笔记+完整源码,拆解实现思路与底层知识点。

一、核心前置知识:随机数生成原理

1. 三个关键函数 | 函数 | 头文件 | 作用说明 |

|`rand()` | `#include<stdlib.h>` | 生成伪随机整数,范围`0~RAND_MAX`(多数编译器值32767),默认种子固定=1,每次运行随机数不变

| `srand(seed)` | `#include<stdlib.h>` | 设置随机数种子,种子不同,`rand`生成序列不同

| `time(NULL)` | `#include<time.h>` | 获取1970.1.1至今的系统秒数,实时变化,用作动态种子 |

标准种子写法:`srand((unsigned int)time(NULL)); 放在程序起始位置,保证每次运行随机数不一样。

2. 自定义随机数范围公式

通用区间:生成`[a,b]`随机整数

a + rand() % (b - a + 1);

举例:

- `0~99`:`rand()%100`

- `1~100`:`rand()%100 + 1`(本游戏使用)

- `100~200`:`100 + rand()%(200-100+1)`

二、完整游戏代码解析

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<time.h> #include<stdlib.h> //猜数字游戏 void game()//随机值函数 { int i = 0; int guess = 0; srand((unsigned int)time(NULL)); int b = rand()%100+1; while (1) { scanf("%d", &guess); if (b < guess) { printf("猜大了\n"); i++; } else if (b > guess) { printf("猜小了\n"); i++; } else { printf("猜对了\n"); i++; break; } } printf("您一共猜了%d次\n", i); } int main()//游戏主体 { int a = 0; do{ printf("----------------\n"); printf("-----1 play-----\n"); printf("-----0 exit-----\n"); printf("----------------\n"); printf("输入1开始游戏,输入0结束\n"); scanf("%d", &a); switch (a) { case 1: printf("游戏开始,请输入1-100所猜数字\n"); game(); break; case 0: printf("游戏结束\n"); break; default: printf("请输入0或1\n"); } } while (a); return 0; }

三、代码分层拆解

1. `game()`函数:单次猜谜逻辑

- `while(1)`死循环持续接收用户输入,直到猜对`break`退出;

- 三次分支判断:猜大/猜小/猜对,同步累加猜测次数; - 结束打印总猜测次数。

2. `main()`函数:游戏菜单框架

- `do-while`实现菜单循环,输入1开局、输入0退出、其他数字提示非法输入;

- `switch`分支处理菜单选项,实现多次开局游玩。

运行演示效果

1. 程序启动,打印菜单: ``` ---------------- ----1 play------ ----0 exit------ 输入1开始游戏,输入0结束

2. 输入`1`进入游戏,输入数字反复提示大小,猜对统计次数;

3. 输入`0`直接退出整个程序,输入其他数字提示`请输入0或1`。

四、踩坑总结与优化建议

常见坑点

1. `srand()`不能放进循环内部:如果写在`game`的while里,短时间多次调用会因为`time`秒数不变,随机数重复;仅在游戏启动调用1次即可;

2. 忘记加`#define _CRT_SECURE_NO_WARNINGS`:VS环境`scanf`会报安全警告;

3. 随机范围写错:`rand()%100`是0~99,想要1~100必须`+1`。

进阶优化方向

1. 增加最大猜测次数限制(例如最多7次,猜错直接公布答案);

2. 增加难度选择:简单(1~50)/困难(1~200);

3. 增加计分系统,多次游戏保存最佳纪录。

五、学习收获

1. 掌握伪随机数生成全流程:种子→rand→区间缩放公式;

2. 熟练`do-while(菜单循环)+while(游戏循环)+switch(多分支)`嵌套组合;

3. 理解伪随机和真随机区别:`rand`依赖种子,固定种子=固定随机序列。

> 本文源码可直接复制到VS/Dev-C++编译运行,是C语言入门循环章节优质练手项目。

http://www.jsqmd.com/news/940704/

相关文章:

  • [特殊字符]黑龙江省考笔试机构深度评测|行测申论怎么选不踩坑
  • Zotero-Style插件终极指南:让文献管理变得高效又美观
  • Qwen-VLA:跨任务、环境与机器人形态的视觉-语言-动作统一建模
  • 基于边缘计算的智慧停车场AI算力评估与SE110S-WA32部署方案
  • LLaMA-Factory微调ChatGLM3-6B后,如何手动构建prompt模板并用vLLM推理(附完整代码)
  • 告别卡顿!用Tiny11 Builder自制精简版Win11镜像,老电脑也能流畅跑
  • 从堡垒机到特权治理:企业为何全面升级 PAM360
  • 数据高效因果推断:用最少信息实现个体化精准决策
  • Typora破解2025最新版破解教程1.10.8
  • 佛山靠谱的餐饮家具工厂哪家强
  • uniapp H5项目里不靠后端直接看PDF和Word文档的轻量预览方案
  • 实验复现失败率高达68%?一文拆解AI工具与实验管理深度整合的4个黄金接口
  • 别再手动截屏了!教你用YOLOv8分割模型(yolov8n-seg.pt)实现视频物体精准抠图与保存
  • 群发邮件用什么邮箱?从个人到企业级的高效解决方案全解析
  • 谷歌收录怎么查询?纯JS渲染的单页面,验抓取只需1招
  • 2026年薪酬设计指南:多少钱才能留住核心人才?
  • AI Agent在行业Agent化中寻找切入点
  • 能区分说话人且转写准的录音 APP
  • 汕尾市2026年黄金回收白银回收铂金回收门店指南 五家诚信店铺排行榜+联系方式电话推荐 - 大熊猫898989
  • UR5机械臂MATLAB/Python双平台运动学求解工具(含8组逆解)
  • AI数字人公司哪家专业?2026年更值得重点比较的5项核心能力
  • 别再让大模型说‘我是AI’了:手把手教你用Qwen-14B打造专属‘数字员工’
  • 安全实验室搭建指南:在虚拟机里用Kali和那个GitHub DDoS脚本,能学到什么?
  • 全栈开发硬核命题,拒绝CRUD男孩
  • 14-5 TCP网络编程
  • 南京市2026年黄金回收白银回收铂金回收门店指南 五家诚信店铺排行榜+联系方式电话推荐 - 大熊猫898989
  • Java搭建萌宠生态系统商城交易、洗护托运业务逻辑解析
  • FANUC机器人Socket通讯避坑指南:从KAREL代码到稳定连接,我踩过的几个雷
  • 【C++ 从基础到项目实战】C++(五):类与对象基础——构造、析构与访问控制
  • 告别复制粘贴:用STM32CubeMX快速初始化KEIL5工程,再无缝移植标准库代码(F103实战)