没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
使用
Rust
语言编程猜谜游戏
让我们一起通过一个动手项目来深入了解 Rust!本章通过向您展示如何在实际程序
中使用它们,向您介绍一些常见的 Rust 概念。您将学习 let、match、方法、相关函
数、外部 crates 等!
我们将实现一个经典的初学者编程问题:猜谜游戏。其工作原理如下:程序将生成
一个 1 到 100 之间的随机整数。然后,它将提示玩家输入猜测。输入猜测后,程序
将指示猜测是太低还是太高。如果猜测正确,游戏将打印一条祝贺信息并退出。
设置新项目
使用 Cargo 创建一个新项目,如下所示:
$ cargo new guessing_game
$ cd guessing_game
第一个命令 cargo new 将项目名称(guessing_name)作为第一个参数。第二个命令
将更改为新项目的目录。
查看生成的 Cargo.toml 文件:
[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]
cargo new 为您生成了一个“Hello,world!”程序。查看 src/main.rs 文件:
文件名:src/main.rs
fn main() {
println!("Hello, world!");
}
现在,让我们编译这个“Hello,world!”程序,并使用 cargo run 命令在同一步骤中
运行它:
$ cargo run
Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.50s
Running `target/debug/guessing_game`
Hello, world!
当你需要快速迭代一个项目时,run 命令会派上用场,就像我们在这个游戏中所做
的那样,在进入下一个迭代之前快速测试每个迭代。
重新打开 src/main.rs 文件。您将编写此文件中的所有代码。
处理猜谜
猜谜游戏程序的第一部分将要求用户输入,处理该输入,并检查输入是否符合预期
的形式。首先,我们将允许玩家输入猜测。将清单 2-1 中的代码输入 src/main.rs。
文件名:src/main.rs
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);
}
清单 2-1:从用户那里获取猜测并打印出来的代码
这段代码包含很多信息,所以让我们逐行浏览一下。为了获取用户输入并将结果打
印为输出,我们需要将 io 输入/输出库带入范围。io 库来自标准库,称为 std:
use std::io;
默认情况下,Rust 在标准库中定义了一组项目,并将其带入每个程序的范围。这个
集合称为前奏,您可以在标准库文档中看到其中的所有内容。
如果要使用的类型不在序言中,则必须使用 use 语句将该类型显式带入范围。使用
std::io 库为您提供了许多有用的功能,包括接受用户输入的能力。
主要功能是程序的入口点:
fn main() {
fn 语法声明了一个新函数;括号()表示没有参数;花括号{开始函数体。
println!是一个将字符串打印到屏幕上的宏:
println!("Guess the number!");
println!("Please input your guess.");
此代码正在打印一个提示,说明游戏是什么,并请求用户输入。
用变量存储值
接下来,我们将创建一个变量来存储用户输入,如下所示:
let mut guess = String::new();
现在这个节目越来越有趣了!这条小队伍里发生了很多事情。我们使用 let 语句来
创建变量。下面是另一个例子:
let apples = 5;
此行创建了一个名为 apples 的新变量,并将其绑定到值 5。在 Rust 中,默认情况下
变量是不可变的,这意味着一旦我们给变量一个值,值就不会改变。我们将在第 3
章的“变量和可变性”部分详细讨论这个概念。为了使变量可变,我们在变量名前添
加 mut:
let apples = 5; // immutable
let mut bananas = 5; // mutable
注意://语法开始一个注释,一直持续到行尾。Rust 会忽略注释中的所有内容。我
们将在第 3 章中更详细地讨论评论。
回到猜谜游戏程序,您现在知道 let mut guess 将引入一个名为 guess 的可变变量。
等号(=)告诉 Rust 我们现在想将某些内容绑定到变量。等号右侧是 guess 绑定的
值,这是调用 String::new 的结果,函数返回 String 的新实例。String 是标准库提供
的字符串类型,是一个可增长的 UTF-8 编码文本位。
::新行中的::语法表示 new 是 String 类型的关联函数。关联函数是在一个类型
上实现的函数,在本例中为 String。这个新函数创建了一个新的空字符串。你会在
许多类型上找到一个新函数,因为它是一个生成某种新值的函数的通用名称。
完整地说,let mut guess=String::new();行创建了一个可变变量,该变量当前绑
定到 String 的一个新的空实例。呼!
接收用户输入
回想一下,我们使用 std::io 包含了标准库的输入/输出功能;在程序的第一行。现
在我们将从 io 模块调用 stdin 函数,这将允许我们处理用户输入:
io::stdin()
.read_line(&mut guess)
如果我们没有使用 std::io 导入 io 库;在程序开始时,我们仍然可以通过将此函数
调用编写为 std::io::stdin 来使用该函数。stdin 函数返回 std::io::stdin 的实例,
这是一种表示终端标准输入句柄的类型。
接下来,行.read_line(&mut guess)调用标准输入句柄上的 read_line 方法以获取用
户的输入。我们还将&mut guess 作为参数传递给 read_line,告诉它将用户输入存储
在哪个字符串中。read_line 的全部工作是将用户键入的任何内容放入标准输入中,
并将其附加到字符串中(不覆盖其内容),因此我们将该字符串作为参数传递。字
符串参数需要是可变的,以便该方法可以更改字符串的内容。
&表示此参数是一个引用,它为您提供了一种方法,让代码的多个部分访问一条数
据,而无需多次将该数据复制到内存中。引用是一个复杂的特性,Rust 的主要优点
之一是使用引用是多么安全和容易。你不需要知道很多细节来完成这个程序。现在,
您需要知道的是,与变量一样,引用默认情况下是不可变的。因此,您需要编写&mut
guess 而不是&guess 来使其可变。(第 4 章将更全面地解释参考文献。)
处理潜在故障并取得结果
我们仍在处理这行代码。我们现在讨论的是第三行文本,但请注意,它仍然是一行
逻辑代码的一部分。下一部分是这种方法:
.expect("Failed to read line");
我们可以把这段代码写成:
io::stdin().read_line(&mut guess).expect("Failed to read line");
然而,一行很难阅读,所以最好把它分开。当你用.method_name()语法调用一个
方法时,引入换行符和其他空格来帮助拆分长线通常是明智的。现在让我们讨论一
下这条线的作用。
剩余25页未读,继续阅读
资源评论
icysmile131
- 粉丝: 4632
- 资源: 743
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- java全大撒大撒大苏打
- pca20241222
- LabVIEW实现LoRa通信【LabVIEW物联网实战】
- CS-TY4-4WCN-转-公版-XP1-8B4WF-wifi8188
- 计算机网络期末复习资料(课后题答案+往年考试题+复习提纲+知识点总结)
- 从零学习自动驾驶Lattice规划算法(下) 轨迹采样 轨迹评估 碰撞检测 包含matlab代码实现和cpp代码实现,方便对照学习 cpp代码用vs2019编译 依赖qt5.15做可视化 更新:
- 风光储、风光储并网直流微电网simulink仿真模型 系统由光伏发电系统、风力发电系统、混合储能系统(可单独储能系统)、逆变器VSR+大电网构成 光伏系统采用扰动观察法实现mppt控
- (180014016)pycairo-1.18.2-cp35-cp35m-win32.whl.rar
- (180014046)pycairo-1.21.0-cp311-cp311-win32.whl.rar
- DS-7808-HS-HF / DS-7808-HW-E1
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功