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

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

创建项目文件

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

cargo new guessing_game
cd guessing_game

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

处理用户输入数据

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构建项目。

[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 build
    Updating crates.io index
  Downloaded cfg-if v1.0.0
  Downloaded getrandom v0.2.14
  Downloaded rand_chacha v0.3.1
  Downloaded rand_core v0.6.4
  Downloaded ppv-lite86 v0.2.17
  Downloaded rand v0.8.5
  Downloaded 6 crates (192.5 KB) in 15.17s
   Compiling cfg-if v1.0.0
   Compiling ppv-lite86 v0.2.17
   Compiling getrandom v0.2.14
   Compiling rand_core v0.6.4
   Compiling rand_chacha v0.3.1
   Compiling rand v0.8.5
   Compiling guessing_game v0.1.0 (D:\Rust\test\guessing_game)
    Finished dev [unoptimized + debuginfo] target(s) in 19.66s

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

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 run
   Compiling guessing_game v0.1.0 (D:\Rust\test\guessing_game)
    Finished dev [unoptimized + debuginfo] target(s) in 0.44s
     Running `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!!!

猜数字小游戏最终版

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

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 run
   Compiling guessing_game v0.1.0 (D:\Rust\test\guessing_game)
    Finished dev [unoptimized + debuginfo] target(s) in 1.11s
     Running `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!!!
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Rust程序设计语言第二版》是一本关于Rust编程语言的权威指南。该书由Steve Klabnik和Carol Nichols合著,适合初学者和有一定经验的程序员使用。 《Rust程序设计语言第二版》对Rust编程语言进行了广泛而深入的介绍。它从基础知识开始,逐步引导读者了解Rust的核心概念和语法。书中包括大量的示例代码和练习题,帮助读者巩固所学知识,并通过实践来提高编程能力。 该书的结构非常清晰,由21个章节组成。第一章介绍了Rust的背景和特点,以及如何安装和配置Rust开发环境。接下来的几章系统地介绍了Rust的基本语法、数据类型、变量和函数等核心概念。然后,书中详细讲解了Rust的所有权系统、生命周期、并发编程和错误处理等高级主题。最后几章则介绍了Rust的标准库、编写测试和文档等实用技巧。 《Rust程序设计语言第二版》对于理解Rust编程语言的特点和哲学具有很大帮助。书中除了介绍语法和概念外,还深入讲解了Rust设计原则和最佳实践,帮助读者养成良好的编码习惯。 总的来说,《Rust程序设计语言第二版》是一本优秀的Rust编程入门指南。它适合初学者入门,也适合有一定经验的程序员深入学习。这本书不仅能够帮助读者掌握Rust的基本语法和概念,还能够提供实际项目开发中的指导和建议。无论是想学习Rust编程语言还是提升Rust编程能力,这本书都是一本值得推荐的读物。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值