On this page

Guessing Game by Rust

About 443 wordsAbout 1 min

Rust

2024-7-28


使用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);
}

为了获取用户输入并打印结果作为输出,我们需要将 io输入/输出库引入当前作用域。io 库来自于标准库,也被称为 std

默认情况下,Rust 设定了若干个会自动导入到每个程序作用域中的标准库内容,这组内容被称为 预导入(prelude) 内容。你可以在标准库文档中查看预导入的所有内容。

如果你需要的类型不在预导入内容中,就必须使用 use 语句显式地将其引入作用域。std::io 库提供很多有用的功能,包括接收用户输入的功能。

测试

  GuessingGame cargo run
   Compiling GuessingGame v0.1.0 (/home/zq/Projects/Learning/LearnRust/Projects/GuessingGame)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.07s
     Running `target/debug/GuessingGame`
Guess the number!
Please input your guess.
10
You guessed: 10

处理异常输入

let guess: u32 = match guess.trim().parse() {
	Ok(num) => num,
	Err(_) => continue,
};

如果当前输入不能被正常转换,就continue这次 loop

使用外部依赖

Cargo.toml中添加

[dependencies]
rand = "0.8.5"

main.rs使用rand 并创建随机数

let secret_number = rand::thread_rng().gen_range(1..=100);

完整代码

use std::io;
use std::cmp::Ordering;
use rand::Rng;

fn main() {
    let secret_number = rand::thread_rng().gen_range(1..=100);
    println!("Guess the number!");

    loop {
        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);

        let guess: u32 = match guess.trim().parse() {
            Ok(num) => num,
            Err(_) => continue,
        };

        match guess.cmp(&secret_number) {
            Ordering::Less => println!("Too small!"),
            Ordering::Greater => println!("Too big!"),
            Ordering::Equal => {
                println!("You win!");
                break;
            }
        }
    }
}

公安备案: 32020502000797
ICP备2021005150号