猜数游戏-Rust版

cargo new guessing_game 创建项目

输入任意内容,并打印出来

main.rs:

复制代码
use std::io; // 像String这些类型都在预先导入的prelude里,如果要使用的不在prelude里,则需要显式导入

fn main() {
    println!("猜数");

    println!("猜测一个数");


    let mut guess = String::new(); //String::new()返回一个String实例,创建一个空白的字符串

    // 读取一行内容,放到guess里; (io::stdin()返回一个句柄)
    io::stdin().read_line(&mut guess).expect("无法读取行");// 引用在Rust里默认也是不可变的,所以需要&mut

    // {}为占位符,类似golang里的%s,%d
    println!("你猜测的数是:{}", guess)
}

生成随机数

Cargo.toml

复制代码
[package]
name = "guessing_game"
version = "0.1.0"
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
rand = "^0.3.14" # ^代表任何与0.3.14这个版本公共api兼容的版本都可以

rand包还依赖libc

复制代码
use std::io;
// 像String这些类型都在预先导入的prelude里,如果要使用的不在prelude里,则需要显式导入
use rand::Rng; // trait,类似golang的接口,定义了很多方法

fn main() {
    println!("猜数");

    let secret_number = rand::thread_rng().gen_range(1, 101); // [a,b)
    println!("神秘数字是{}", secret_number);

    println!("猜测一个数");


    let mut guess = String::new(); //String::new()返回一个String实例,创建一个空白的字符串

    // 读取一行内容,放到guess里; (io::stdin()返回一个句柄)
    io::stdin().read_line(&mut guess).expect("无法读取行");// 引用在Rust里默认也是不可变的,所以需要&mut

    // {}为占位符,类似golang里的%s,%d
    println!("你猜测的数是:{}", guess)
}

比较大小

复制代码
use std::io;
use std::cmp::Ordering;
// 像String这些类型都在预先导入的prelude里,如果要使用的不在prelude里,则需要显式导入
use rand::Rng; // trait,类似golang的接口,定义了很多方法

fn main() {
    println!("猜数");

    // i32 u32 i64,不指定则默认i32
    let secret_number = rand::thread_rng().gen_range(1, 101); // [a,b)
    println!("神秘数字是{}", secret_number);

    println!("猜测一个数");


    let mut guess = String::new(); //String::new()返回一个String实例,创建一个空白的字符串

    // 读取一行内容,放到guess里; (io::stdin()返回一个句柄)
    io::stdin().read_line(&mut guess).expect("无法读取行");// 引用在Rust里默认也是不可变的,所以需要&mut

    // shadow, 隐藏;(用同名变量隐藏旧变量)
    // trim 去掉空格等
    // parse 将字符创串装换为u32 类型
    let guess: u32 = guess.trim().parse().expect("Please type a number!");

    // {}为占位符,类似golang里的%s,%d
    println!("你猜测的数是:{}", guess);


    match guess.cmp(&secret_number) {
        Ordering::Less => println!("Too small!"), //arm,类似分支吧
        Ordering::Greater => println!("Too big!"), //arm,类似分支吧
        Ordering::Equal => println!("You win!"), //arm,类似分支吧
    }
}

做多次猜测,直到猜对

复制代码
use std::io;
use std::cmp::Ordering;
// 像String这些类型都在预先导入的prelude里,如果要使用的不在prelude里,则需要显式导入
use rand::Rng; // trait,类似golang的接口,定义了很多方法

fn main() {
    println!("猜数");

    // i32 u32 i64,不指定则默认i32
    let secret_number = rand::thread_rng().gen_range(1, 101); // [a,b)
    println!("神秘数字是{}", secret_number);

    loop {
        println!("猜测一个数");

        let mut guess = String::new(); //String::new()返回一个String实例,创建一个空白的字符串

        // 读取一行内容,放到guess里; (io::stdin()返回一个句柄)
        io::stdin().read_line(&mut guess).expect("无法读取行");// 引用在Rust里默认也是不可变的,所以需要&mut

        // shadow, 隐藏;(用同名变量隐藏旧变量)
        // trim 去掉空格等
        // parse 将字符创串装换为u32 类型
        let guess: u32 = match guess.trim().parse() { // match,是rust错误处理的惯用方式
            Ok(num) => num,
            Err(_) => continue, //_表示舍弃,不关心
        };


        // {}为占位符,类似golang里的%s,%d
        println!("你猜测的数是:{}", guess);


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

本文由mdnice多平台发布

相关推荐
牛奔2 小时前
Go 如何避免频繁抢占?
开发语言·后端·golang
想用offer打牌7 小时前
MCP (Model Context Protocol) 技术理解 - 第二篇
后端·aigc·mcp
KYGALYX8 小时前
服务异步通信
开发语言·后端·微服务·ruby
掘了8 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
爬山算法9 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
Moment9 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
Cobyte10 小时前
AI全栈实战:使用 Python+LangChain+Vue3 构建一个 LLM 聊天应用
前端·后端·aigc
程序员侠客行11 小时前
Mybatis连接池实现及池化模式
java·后端·架构·mybatis
Honmaple11 小时前
QMD (Quarto Markdown) 搭建与使用指南
后端
PP东11 小时前
Flowable学习(二)——Flowable概念学习
java·后端·学习·flowable