Fork me on GitHub

rust学习(三)编写一个简单的猜数小游戏

开始

老样子我们先利用caogo来创建新项目

  • cargo new guessing_game
  • cd guessing_game

ps: 我们学过其他编程语言时,一般都编写过这个小例子...

编写代码(简单版本)

use std::io; // 使用io输入输出库

fn main() {
    // 调用micro
    println!("Guess the number!");
    println!("Please input your guess.");

    // rust中变量默认是immutable的,要使得mutable需要使用mut关键字来声明
    // 利用let创建一个可变变量
    let mut guess_number: String = String::new();

    io::stdin() // 获取终端输入句柄
            // & 表示引用,允许多处代码访问同一处数据,无需在内存中多次拷贝
            // &引用默认是不可变的,可以加mut使其可变
            .read_line(&mut guess_number) // 获取用户输入的内容并追加到字符串变量guess_number中
            // read_line会返回一个类型为Result的值
            // Result是一种枚举类型,每种可能的状态被称为枚举成员
            .expect("Failed to read line");

    println!("You guessed: {guess_number}");
}

Note: rust中变量默认是不可变的,如果之后需要修改变量的值,需要使用mut关键字来使其可变

复杂版本

use rand::Rng; // Rng是一个trait
use std::cmp::Ordering; // 引入Ordering枚举

use std::io; // 引入io输入输出库
fn main() {
    println!("Guess the number!");

    // 引入随机数
    // 范围在1-100之间
    // 范围表达式start..=end 上下边界均为闭区间
    let secret_number: u32 = rand::thread_rng().gen_range(1..=100);
    // println!("The secret number is: {}", secret_number);

    // 猜了几次
    let mut guess_count: u32 = 0;

    // loop关键字创建了一个死循环
    loop {
        println!("Please input your guess: ");

        // 确保立即刷新输出
        use std::io::Write;
        io::stdout().flush().unwrap();

        // rust中变量默认是immutable的,要使得mutable需要使用mut关键字来声明
        // 利用let创建一个可变变量
        let mut guess_number = String::new();

        io::stdin() // 获取终端输入句柄
            // & 表示引用,允许多处代码访问同一处数据,无需在内存中多次拷贝
            // &引用默认是不可变的,可以加mut使其可变
            .read_line(&mut guess_number) // 获取用户输入的内容并追加到字符串变量guess_number中
            // read_line会返回一个类型为Result的值
            // Result是一种枚举类型,每种可能的状态被称为枚举成员
            .expect("Failed to read line");

        println!("You guessed: {guess_number}");

        // shadowing遮蔽之前的变量guess_number
        // shadowing功能经常用于将一个类型的值转换为另一个类型的值
        // 将guess_number从字符串类型转换为整数类型
        let guess_number: u32 = match guess_number.trim().parse() {
            Ok(num) => num,
            Err(_) => continue,
        };

        guess_count += 1;

        // 一个match表达式由分支构成
        match guess_number.cmp(&secret_number) {
            Ordering::Less => println!("📉 Too small!"),
            Ordering::Greater => println!("📈 Too big!"),
            Ordering::Equal => {
                println!("🎉 You got it! The number was {secret_number}.");
                println!("🔢 You guessed {guess_count} times.\n");
                break; // 用户猜对时,结束循环。退出游戏
            }
        }
    }
}

对了我阅读的书籍是《The Rust Programming Language》,代码几乎和官网的一致,有时候也会根据自己的想法适当修改代码~~~

link: https://doc.rust-lang.org/book/title-page.html

posted @ 2025-10-30 23:14  Hui_Li  阅读(9)  评论(0)    收藏  举报