跳转至

Requirement

猜数游戏-目标 生成一个1到100间的随机数 提示玩家输入一个猜测 猜完之后,程序会提示猜测是太小了还是太大了如果猜测正确,那么打印出一个庆祝信息,程序退出

Solution

预备:创建项目

Text Only
cargo new guessing_name

Step1:第一次猜测

Rust
use std::io; //io这个库在标准库里面,标准库就是std
fn main() {
    println!("猜数游戏!");
    println!("猜一个数!");
    //guess需要是可变的,所以加上 &mut
    let mut guess = String::new();
    // 读取用户输入
    io::stdin().read_line(&mut guess).expect("无法读取行");
    println!("你猜测的数字是:{}", guess);
}
输出

Bash
> cargo run
    Blocking waiting for file lock on build directory
   Compiling my-project v0.1.0 (/home/runner/RustClass)
    Finished dev [unoptimized + debuginfo] target(s) in 1.77s
     Running `target/debug/my-project`
猜数游戏!
猜一个数!
75
你猜测的数字是:75
Comment: fn main(){}是Rust第一个执行的函数 Rust中变量是不可变的,创建变量用let,如

Rust
 let guess = 22;
需要加上mut,让变量变成可变的
Rust
 let mut guess = 22;

Step2:生成神秘数字

引入rand随机数依赖 在这里插入图片描述

Rust
use rand::Rng;//随机数包
use std::io; //io这个库在标准库里面,标准库就是std 
fn main() {
    println!("猜数游戏!");
    println!("猜一个数!");

    let secret_number = rand::thread_rng().gen_range(1, 101);
    println!("要猜测的数字是:{}", secret_number);

    let mut guess = String::new();
    io::stdin().read_line(&mut guess).expect("无法读取行");

    println!("你猜测的数字是:{}", guess);
}
输出

Bash
 cargo run
   Compiling my-project v0.1.0 (/home/runner/RustClass)
    Finished dev [unoptimized + debuginfo] target(s) in 0.91s
     Running `target/debug/my-project`
猜数游戏!
猜一个数!
要猜测的数字是:8
32
你猜测的数字是:32

Step3:比较猜测数字和神秘数字

Rust
use rand::Rng;//随机数包
use std::cmp::Ordering;//比较
use std::io; //io这个库在标准库里面,标准库就是std 
fn main() {
    println!("猜数有戏!");
    println!("猜一个数!");

    let secret_number = rand::thread_rng().gen_range(1, 101);
    println!("猜测一个数字是:{}", secret_number);

    let mut guess = String::new();
    io::stdin().read_line(&mut guess).expect("无法读取行");

    let guess: u32 = guess.trim().parse().expect("请输入数字");
    println!("你猜测的数字是:{}", guess);
    // if else
    match guess.cmp(&secret_number) {
        Ordering::Less => println!("太小了"),
        Ordering::Greater => println!("太大了"),
        Ordering::Equal => println!("你赢了"),
    }
}

Step4:多次猜测

用loop实习多次猜测 猜对了break退出 类型转换,trim()去除空白格和换行等字符 完整版

Rust
use rand::Rng; //随机数包
use std::cmp::Ordering; //比较
use std::io; //io这个库在标准库里面,标准库就是std
fn main() {
    println!("猜数游戏!");
    let secret_number = rand::thread_rng().gen_range(1, 101);

    loop {
        println!("猜一个数!");
        let mut guess = String::new();
        io::stdin().read_line(&mut guess).expect("无法读取行");
            //类型转换,trim()去除空白格和换行等字符
        let guess: u32 = match guess.trim().parse() {
            Ok(num) => num,
            Err(_) => continue,
        };

        println!("你猜测的数字是:{}", guess);

        match guess.cmp(&secret_number) {
            Ordering::Less => println!("太小了"),
            Ordering::Greater => println!("太大了"),
            Ordering::Equal => {
                println!("你赢了");
                break;
            }
        }
    }
}
输出

Bash
 cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.24s
     Running `target/debug/my-project`
猜数游戏!
猜一个数!
50
你猜测的数字是:50
太大了
猜一个数!
25
你猜测的数字是:25
太大了
猜一个数!
12
你猜测的数字是:12
太大了
猜一个数!
6
你猜测的数字是:6
太大了
猜一个数!
3
你猜测的数字是:3
太小了
猜一个数!
4
你猜测的数字是:4
太小了
猜一个数!
5
你猜测的数字是:5
你赢了

Reference

[1] 软件工艺师. (2020年10月21日). Rust编程语言入门教程(Rust语言/Rust权威指南配套)【已完结】[视频]. Bilibili. https://www.bilibili.com/video/BV1hp4y1k7SV.