Rust猜数游戏:编程入门与核心概念实践
1. 项目概述猜数游戏是编程入门教程中最经典的项目之一它完美展示了基础编程概念的实际应用。这个Rust版本的猜数游戏实现虽然简单却涵盖了变量声明、用户输入处理、随机数生成、条件判断和循环控制等核心编程概念。通过这个项目新手可以快速上手Rust的基础语法同时理解如何将这些基础元素组合成一个完整的程序。2. 环境准备与项目创建2.1 安装Rust工具链在开始之前确保已安装Rust的最新稳定版。可以通过以下命令安装curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh安装完成后验证安装是否成功rustc --version cargo --version2.2 创建新项目使用Cargo创建新项目cargo new guessing_game cd guessing_game这会生成基本的项目结构guessing_game/ ├── Cargo.toml └── src └── main.rs2.3 初始代码解析查看自动生成的src/main.rsfn main() { println!(Hello, world!); }这是一个最简单的Rust程序fn定义函数main是程序入口println!是宏调用。3. 核心功能实现3.1 处理用户输入首先修改代码获取用户输入use std::io; fn main() { println!(Guess the number!); println!(Please input your guess.); let mut guess String::new(); io::stdin() .read_line(mut guess) .expect(Failed to read line); println!(You guessed: {}, guess); }关键点解析use std::io引入标准库的IO模块let mut guess声明可变变量String::new()创建新的空字符串read_line读取用户输入到字符串expect处理可能的错误3.2 添加随机数生成修改Cargo.toml添加rand依赖[dependencies] rand 0.8.3然后更新main.rsuse rand::Rng; use std::io; fn main() { println!(Guess the number!); let secret_number rand::thread_rng().gen_range(1..101); println!(The secret number is: {}, secret_number); println!(Please input your guess.); let mut guess String::new(); io::stdin() .read_line(mut guess) .expect(Failed to read line); println!(You guessed: {}, guess); }3.3 比较猜测与秘密数字添加比较逻辑use rand::Rng; use std::cmp::Ordering; use std::io; fn main() { // --snip-- let guess: u32 guess.trim().parse().expect(Please type a number!); match guess.cmp(secret_number) { Ordering::Less println!(Too small!), Ordering::Greater println!(Too big!), Ordering::Equal println!(You win!), } }4. 完善游戏逻辑4.1 添加游戏循环使用loop实现多次猜测loop { println!(Please input your guess.); // --snip-- match guess.cmp(secret_number) { Ordering::Less println!(Too small!), Ordering::Greater println!(Too big!), Ordering::Equal { println!(You win!); break; } } }4.2 处理无效输入改进输入解析忽略非数字输入let guess: u32 match guess.trim().parse() { Ok(num) num, Err(_) continue, };5. 最终完整代码use rand::Rng; use std::cmp::Ordering; use std::io; fn main() { println!(Guess the number!); let secret_number rand::thread_rng().gen_range(1..101); loop { println!(Please input your guess.); let mut guess String::new(); io::stdin() .read_line(mut guess) .expect(Failed to read line); let guess: u32 match guess.trim().parse() { Ok(num) num, Err(_) continue, }; println!(You guessed: {}, guess); match guess.cmp(secret_number) { Ordering::Less println!(Too small!), Ordering::Greater println!(Too big!), Ordering::Equal { println!(You win!); break; } } } }6. 关键概念解析6.1 变量与可变性Rust中变量默认不可变需显式声明为可变let mut guess String::new(); // 可变 let x 5; // 不可变6.2 错误处理Rust使用Result类型处理可能失败的操作let guess: u32 match guess.trim().parse() { Ok(num) num, Err(_) continue, };6.3 模式匹配match表达式是Rust强大的控制流结构match guess.cmp(secret_number) { Ordering::Less println!(Too small!), Ordering::Greater println!(Too big!), Ordering::Equal println!(You win!), }7. 扩展与优化建议7.1 添加游戏统计可以记录猜测次数并在获胜时显示let mut guess_count 0; // 在循环内增加 guess_count 1; // 获胜时显示 println!(You win in {} guesses!, guess_count);7.2 难度设置通过修改随机数范围实现不同难度let secret_number rand::thread_rng().gen_range(1..100); // 简单 let secret_number rand::thread_rng().gen_range(1..1000); // 困难7.3 输入验证增强可以限制输入数字的范围let guess: u32 match guess.trim().parse() { Ok(num) if (1..100).contains(num) num, _ { println!(Please enter a number between 1 and 100); continue; } };8. 常见问题解决8.1 编译错误类型不匹配确保比较的两个值类型相同let guess: u32 ... // 明确指定类型 let secret_number: u32 ... // 同样类型8.2 随机数范围问题注意范围表示法1..101 // 1到100 1..100 // 同上包含结束值8.3 输入处理异常正确处理换行符guess.trim() // 去除首尾空白字符9. 项目总结这个猜数游戏项目虽然简单但涵盖了Rust编程的多个核心概念变量声明与可变性用户输入处理随机数生成条件判断与循环错误处理模式匹配通过这个项目我们看到了Rust如何将安全性、表达力和性能结合在一起。特别是所有权系统和Result类型它们虽然增加了初学者的学习曲线但能帮助开发者编写更健壮的代码。

相关新闻

UE4SS实战指南:从原理到脚本,掌握虚幻引擎4游戏动态修改

UE4SS实战指南:从原理到脚本,掌握虚幻引擎4游戏动态修改

1. 项目概述:UE4SS是什么,以及它能为你带来什么如果你是一名对《幻兽帕鲁》、《艾尔登法环》或者任何基于虚幻引擎4(UE4)开发的PC游戏充满好奇的玩家或开发者,那么UE4SS这个名字你很可能已经听过。简单来说&#xff0c…

2026/10/18 3:02:13 阅读更多 →
C++ vector性能优化全解析:从内存分配到数据布局的实战技巧

C++ vector性能优化全解析:从内存分配到数据布局的实战技巧

1. 项目概述:为什么C的vector需要优化? 在C的日常开发中, std::vector 几乎是每个开发者都会高频使用的容器。它简单、直观,提供了动态数组的能力,让我们可以方便地管理一组连续存储的元素。然而,正是这种…

2026/10/19 11:31:00 阅读更多 →
普通瓦楞纸箱与覆膜防潮瓦楞纸箱,在高湿仓储场景下的使用寿命与成本差异是多少?

普通瓦楞纸箱与覆膜防潮瓦楞纸箱,在高湿仓储场景下的使用寿命与成本差异是多少?

摘要:在相对湿度 85% 以上的高湿仓储场景中,普通瓦楞纸箱 7-15 天即出现强度大幅衰减,30 天左右丧失堆码能力,使用寿命仅为覆膜纸箱的 1/3-1/2;覆膜防潮瓦楞纸箱通过表面覆膜阻隔水汽,强度保留率可达 80% 以…

2026/10/19 7:48:24 阅读更多 →

最新新闻

美赛B题O奖论文拆解:概率搜索模型与路径规划实战

美赛B题O奖论文拆解:概率搜索模型与路径规划实战

去年美赛B题一出,圈子里都在讨论那篇O奖论文。英文原题翻译成中文,核心是四个字:失联寻回。那篇O奖论文的标题如果直译,大概就是《从失联到寻回:某片海域的搜寻之旅》。我刻意不提具体海域名,因为做案例分析…

2026/10/19 22:05:38 阅读更多 →
多测站GNSS精密定位:Kriging插值与卡尔曼滤波实现网络RTK

多测站GNSS精密定位:Kriging插值与卡尔曼滤波实现网络RTK

很多人第一次看到“多测站 GNSS 精密定位 Kriging 卡尔曼滤波”这条链路时,第一反应都是:有必要这么复杂吗?单站差分、PPK、PPP不也能定位吗。我之前做某测试场的动态定位精度评估时也这么想,直到某次基准站距离用户站超过30km&…

2026/10/19 22:05:38 阅读更多 →
IM系统用户管理子服务架构设计与踩坑实践:从表结构到缓存策略

IM系统用户管理子服务架构设计与踩坑实践:从表结构到缓存策略

做IM系统,用户管理子服务往往是看起来最简单、坑却最多的那一块。很多人一开始会觉得,无非就是注册、登录、改个昵称、拉个好友列表,有什么好写的?但真正上手做才发现,一个IM系统里最基础的用户服务,牵扯到…

2026/10/19 22:03:35 阅读更多 →
DUT-OMRON数据集上的U-Net二值分割实战:边缘鲁棒与工业落地

DUT-OMRON数据集上的U-Net二值分割实战:边缘鲁棒与工业落地

简介:本资源是一套面向深度学习初学者与图像分割实践者的Unet多尺度分割实战项目,聚焦二值图像分割任务,特别适配DUT-OMRON数据集的端到端训练与推理需求。压缩包共2000个文件,主体为1979张PNG格式的训练/测试图像及对应mask&…

2026/10/19 22:03:35 阅读更多 →
XXE漏洞剖析:从XML外部实体注入到文件读取与SSRF防御

XXE漏洞剖析:从XML外部实体注入到文件读取与SSRF防御

大概在五年前做某次授权测试,目标系统有个不起眼的文件上传接口,响应报文里带着一段 XML 结构。当时随手改了改请求体,把实体声明换成了外部实体,结果直接把服务器上的/etc/passwd读了出来。那是我第一次真正意识到 XXE&#xff0…

2026/10/19 22:02:34 阅读更多 →
编译通过≠代码健康:C++静态检测原理与工具落地指南

编译通过≠代码健康:C++静态检测原理与工具落地指南

编译通过不等于代码健康:C静态检测到底在查什么我做C开发这些年,越来越觉得一个道理:编译器不报错,只是说你的代码符合语法和类型规则,它压根不关心你的逻辑是不是对的、指针是不是悬空的、资源有没有泄漏。很多问题要…

2026/10/19 22:02:34 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →