【Rust学习】《Rust程序设计语言》第二章:编写猜数字游戏

devtools/2024/9/23 5:15:15/

本笔记为了记录学习Rust过程,内容如有错误请大佬指教
使用IDE:vs code
参考教程:菜鸟教程链接: 菜鸟教程链接:
参考文档:《Rust程序设计语言》Rust 官方文档中文教程

编写猜数字游戏

  • 创建项目文件
    • 处理用户输入数据
    • 引入crate库

创建项目文件

在这里我们用之前学习到的Cargo来构建我们的项目,具体代码如下

rust">cargo new guessing_game
cd guessing_game

在这里插入图片描述
可以看到我在上面还执行了一遍cargo run命令,运行结果是Hello, world! 这是因为cargo new命令在创建文件的时候会默认生成一个Hello, world! 程序。我们可以在项目的src/main.rs 目录下的文件查看。
在这里插入图片描述

处理用户输入数据

rust教程中通过一个简单的处理输入数据的例子来告诉我们rust中关于引用 标准库 初始化变量 错误处理等特性,详细的内容可以去参考《Rust程序设计语言》,我这里就简单写了一遍给出的代码。

rust">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);
}

上述代码编译运行后的结果如下:
在这里插入图片描述

引入crate库

crate 是一个 Rust 代码包,我们现在需要在项目中添加外部的库crate rand 。我们需要修改Cargo.toml 文件,引入一个 rand 依赖。如下所示,将rand = “0.8.3” 添加到 [dependencies] 表块标题下。然后输入 cargo build构建项目。

rust">[package]
name = "guessing_game"
version = "0.1.0"
edition = "2021"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies]
rand = "0.8.3"
$ cargo buildUpdating crates.io indexDownloaded cfg-if v1.0.0Downloaded getrandom v0.2.14Downloaded rand_chacha v0.3.1Downloaded rand_core v0.6.4Downloaded ppv-lite86 v0.2.17Downloaded rand v0.8.5Downloaded 6 crates (192.5 KB) in 15.17sCompiling cfg-if v1.0.0Compiling ppv-lite86 v0.2.17Compiling getrandom v0.2.14Compiling rand_core v0.6.4Compiling rand_chacha v0.3.1Compiling rand v0.8.5Compiling guessing_game v0.1.0 (D:\Rust\test\guessing_game)Finished dev [unoptimized + debuginfo] target(s) in 19.66s

完善好第一版的代码后,我得到了一个建议的猜数字游戏

rust">use std::io;
use std::cmp::Ordering;
use rand::Rng;
fn main() {println!("Guess the number!");let secret_number = rand::thread_rng().gen_range(1..101);println!("The secret_number is: {}", secret_number);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 = guess.trim().parse().expect("Please type a number!");//遮蔽变量guess,使得下面代码编译不会出错println!("You guessed: {}", guess);match guess.cmp(&secret_number){//使用表达式来输出比较的结果Ordering::Less => println!("Too small!"),Ordering::Greater => println!("Too big!"),Ordering::Equal => {println!("Bingo!!!");break;}}}}
$ cargo runCompiling guessing_game v0.1.0 (D:\Rust\test\guessing_game)Finished dev [unoptimized + debuginfo] target(s) in 0.44sRunning `target\debug\guessing_game.exe`
Guess the number!
The secret_number is: 78
Please input your guess.
1
You guessed: 1
Too small!
Please input your guess.
2
You guessed: 2
Too small!
Please input your guess.
70
You guessed: 70
Too small!
Please input your guess.
100
You guessed: 100
Too big!
Please input your guess.
78
You guessed: 78
Bingo!!!

猜数字小游戏最终版

最终版本加入了过滤非数字输入的功能,详细实现可以参考书中的步骤进行复现,我就直接附上代码和我的结果啦!

rust">use std::io;
use std::cmp::Ordering;
use rand::Rng;
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!("Bingo!!!");break;}}}
}
$ cargo runCompiling guessing_game v0.1.0 (D:\Rust\test\guessing_game)Finished dev [unoptimized + debuginfo] target(s) in 1.11sRunning `target\debug\guessing_game.exe`
Guess the number!
Please input your guess.
50
You guessed: 50
Too big!
Please input your guess.
25
You guessed: 25
Too big!
Please input your guess.
12
You guessed: 12
Too small!
Please input your guess.
15
You guessed: 15
Bingo!!!

http://www.ppmy.cn/devtools/25258.html

相关文章

在CentOS7中wget命令显示not found怎么解决

实验需要,在本机上安装了一个CentOS7虚拟机,运行wget命令时显示not found。按照网上的教程,使用命令sudo yum install wget,依然失败。 怎么回事呢?会不会是网络的原因呢?想到这,ping了一下www…

(Askchat.ai、ChatAI、智友AI、AI写作生成器助手、在线AI助手)分享好用的ChatGPT

目录 1、Askchat.ai - 梦想为蓝图,ChatGPT为笔。 2、ChatAI 3、智友AI - MyChatGPT 4、AI写作生成器助手

如何增强交友、婚恋平台、金融等平台的安全性

运营商二要素核验是一种数字身份验证方法,主要使用用户的手机号码和姓名作为核验要素。这两个要素被认为是最基本的用户身份信息,通过运营商的数据库来核实其真实性。 在实际操作中,用户需要提供手机号码和姓名进行验证。应用系统会调用接口…

数据结构八:线性表之循环队列的设计

上篇博客,学习了栈,我们可以知道他也是一种线性表,遵从先进后出的原则,在本节,我们进一步学习另一种线性表—队列。就像饭堂里排队打饭的的队伍,作为一种先进先出的线性表,他又有哪些特别之处呢…

前端业务开发中使用原生js和elementui两种方式实现头像裁切上传的功能

日常业务开发中,无论是后台管理系统还是前台界面,都会遇到图片裁剪的业务需求,选择合适的尺寸或者图片的关键部分,满足我们的功能需求!! 效果预览 效果一: 效果二: 实现过程 1.原生js实现方…

go的反射操作reflect实践

通过反射机制,找到相应的Left或者Right广告 type SearchAdsObj struct {Left PositionAdsObj json:"left"Right PositionAdsObj json:"right" }func getFieldByName(obj SearchAdsObj, fieldName string) (interface{}, error) {fmt.Pr…

Git进阶命令与技巧

Git进阶命令与技巧 重置(reset)、回退(checkout) 重置(reset)和回退(checkout)是两种操作版本控制系统中的代码回退的方法。 重置(reset)操作是将当前分支的…

【C语言进阶】程序编译中的预处理操作

📚作者简介:爱编程的小马,正在学习C/C,Linux及MySQL.. 📚以后会将数据结构收录为一个系列,敬请期待 ● 本期内容讲解C语言中程序预处理要做的事情 目录 1.1 预处理符号 1.2 #define 1.2.1 #define定义标识…