【Rust学习】2. Rust入门猜数游戏案例

该文章演示了如何用Rust编程语言创建一个猜数游戏。首先,它介绍了如何获取用户输入并生成1到100的随机数作为秘密数字。接着,文章展示了如何比较用户的猜测与秘密数字,给出“太大”、“太小”或“正确”的提示。最后,通过循环结构允许玩家多次尝试,直到猜对为止。

Requirement

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

Solution

预备:创建项目

cargo new guessing_name

Step1:第一次猜测

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);
}

输出

> 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,如

 let guess = 22;

需要加上mut,让变量变成可变的

 let mut guess = 22;

Step2:生成神秘数字

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

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);
}

输出

 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:比较猜测数字和神秘数字

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()去除空白格和换行等字符
完整版

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;
            }
        }
    }
}

输出

 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.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值