猜数游戏-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多平台发布

相关推荐
㳺三才人子6 小时前
初探 Flask
后端·python·flask·html
星栈独行6 小时前
我在 Rust 全栈项目里用 JWT 做无状态认证
开发语言·后端·rust·前端框架·开源·github·web
Java爱好狂.6 小时前
Java程序员体系化学习路线(2026最新版)
java·后端·java面试·java架构师·java程序员·java八股文·java学习路线
陈随易7 小时前
Redis 8.8发布,一定要更新
前端·后端·程序员
装不满的克莱因瓶7 小时前
SpringBoot 如何将 lib 目录中jar包打包进最终的jar包里面
spring boot·后端·maven·jar·mvn
ltl8 小时前
Transformer 原论文实验结果:为什么 28.4 BLEU 足以改写路线图
后端
excel8 小时前
为什么我推荐使用 Termius:现代 SSH 工具的完整体验
前端·后端
卷毛的技术笔记9 小时前
Java后端硬核实战:用Spring AI Alibaba+Redis给LLM装上“超强记忆中枢”
java·人工智能·redis·后端·spring·ai·系统架构
IT_陈寒10 小时前
Java的Optional差点让我掉坑里,这几个坑你别踩
前端·人工智能·后端
子兮曰10 小时前
Harness 驾驭工程深度教程:从 AGENTS.md 到全链路 AI 编码基础设施
前端·后端·ai编程