[易学易懂系列|rustlang语言|零基础|快速入门|(23)|实战1:猜数字游戏]

项目实战

实战1:猜数字游戏

我们今天来来开始简单的项目实战。

第一个简单项目是猜数字游戏。

简单来说,系统给了一个随机数字,你根据提示输入你的数字,如果答对了,系统显示:you win!

否则系统会给个提示:太小或太大的提示,继续猜。

我们开始吧!

先用命令生成工程:

cargo new guessing_game

用vscode打开新建的工程guessing_game,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)//从控制台得到用户的输入数据并把它绑定到guess变量
        .expect("Failed to read line");//如果发生错误就打印错误信息

    println!("You guessed: {}", guess);
}

我们导入标准库std::io,这个包主要用来处理IO。

运行上面 的代码,用命令:cargo run

控制台将等待用户输入,用户这时输入一个数字,控制台将打印用户输入的数字。

我们来直接看最终的版本,代码如下:

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); //用库rand产生随机数(范围为:1~101)

    loop {
        //无限循环
        println!("Please input your guess.");

        let mut guess = String::new();

        io::stdin()
            .read_line(&mut guess) //等待用户输入,并绑定到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 => {
                //如果用户输入的数字刚好等于系统随机数,显示“You win!”,并跳出循环
                println!("You win!");
                break; //跳出loop
            }
        }
    }
}

这个程序用了三个库:std::io, std::cmp::Ordering ,rand::Rng