猜数游戏初识Rust-Rust

猜数游戏-一次猜测

let,match方法

1
2
3
4
5
6
7
8
9
10
11
use std::io;//使用通用io库

fn main() {
println!("请猜测一个数字!");//调用宏打印提示

let mut guess = String::new();// let用来声明常量或不可变变量。let mut用来声明可变变量。
//new创建类型实例
io::stdin().read_line(&mut guess).expect("error");//

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

image-20241127144656942

生成随机数字

image-20241127145228460

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//! 猜数字游戏实现

// 导入标准库的输入输出模块
use std::io;
// 导入随机数生成器特性(trait)以使用随机数功能
use rand::Rng;


/// 包含游戏逻辑的完整执行流程
fn main() {
// 输出游戏提示信息到控制台
println!("请猜测一个数字!");

// 生成1-100之间的随机整数(包含1,不包含101)
// 使用rand库的线程本地生成器thread_rng()
let secret_number = rand::thread_rng().gen_range(1..101);

// 创建可变的字符串变量用于存储用户输入
// mut关键字表示变量可变(与Rust的默认不可变特性对应)
let mut guess = String::new();

// 从标准输入读取一行数据到guess变量
// &mut表示可变借用,expect处理可能出现的I/O错误
io::stdin().read_line(&mut guess).expect("读取输入失败");

// 输出用户猜测的数值(包含换行符)
println!("您猜测的数字是:{}", guess);

// 输出谜底数字用于调试(正式游戏应隐藏该输出)
println!("神秘数字是{}", secret_number);
}

比较数字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use rand::Rng;
use std::cmp::Ordering;
use std::io;

fn main() {
println!("请猜测一个数字!");

let secret_number = rand::thread_rng().gen_range(1, 101);

let mut guess = String::new();

io::stdin().read_line(&mut guess).expect("error");

let guess:u32 = guess.trim().parse().expect("number");//类型转换

match guess.cmp(&secret_number) {
Ordering::Less => println!("small"),
Ordering::Greater => println!("big"),
Ordering::Equal => println!("right"),
}

}

多次比较

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use rand::Rng;
use std::cmp::Ordering;
use std::io;

fn main() {
println!("请猜测一个数字!");

let secret_number = rand::thread_rng().gen_range(1, 101);//生成随机数

loop {//循环

let mut guess = String::new();

io::stdin().read_line(&mut guess).expect("error");

let guess:u32 = guess.trim().parse().expect("number");//类型转换

match guess.cmp(&secret_number) {
Ordering::Less => println!("small"),
Ordering::Greater => println!("big"),
Ordering::Equal => {println!("right");break;},//数字正确跳出循环
}

image-20241127151832221

新版本Rust

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use std::{cmp::Ordering, io};
use rand::Rng;

fn main() {
// 生成1-100的随机整数(包含边界)
let secret_number = rand::thread_rng().gen_range(1..=100);
let mut attempts = 0; // 新增:记录尝试次数

println!("🎮 猜数游戏启动!数字范围:1-100");

loop {
println!("🔢 请输入您的猜测:");

// 处理用户输入
let mut guess = String::new();
io::stdin()
.read_line(&mut guess)
.expect("⚠️ 读取输入失败");

// 安全类型转换(支持非数字输入)
let guess: u32 = match guess.trim().parse() {
Ok(num) if (1..=100).contains(&num) => num, // 范围验证
Ok(_) => {
println!("❗ 请输入1-100之间的数字");
continue;
},
Err(_) => {
println!("❗ 无效输入,请重试");
continue;
}
};

attempts += 1; // 增加尝试计数

// 比较逻辑
match guess.cmp(&secret_number) {
Ordering::Less => println!("📉 太小了!"),
Ordering::Greater => println!("📈 太大了!"),
Ordering::Equal => {
println!(
"🎉 猜对了!神秘数字是 {},共用了 {} 次尝试",
secret_number, attempts
);
break; // 退出循环
}
}
}
}

image-20250403101207313