[易学易懂系列|rustlang语言|零基础|快速入门|(23)|实战1:猜数字游戏]
项目实战
实战1:猜数字游戏
我们今天来来开始简单的项目实战。
第一个简单项目是猜数字游戏。
简单来说,系统给了一个随机数字,你根据提示输入你的数字,如果答对了,系统显示:you win!
否则系统会给个提示:太小或太大的提示,继续猜。
我们开始吧!
先用命令生成工程:
cargo new guessing_game
用vscode打开新建的工程guessing_game,src/main.rs的代码更新为如下 :
use std::io;
fn main() {
println!("Guess the number!");
println!("Please input your guess.");
let mut guess = String::new();
io::stdin()
.read_line(&mut guess)//从控制台得到用户的输入数据并把它绑定到guess变量
.expect("Failed to read line");//如果发生错误就打印错误信息
println!("You guessed: {}", guess);
}
我们导入标准库std::io,这个包主要用来处理IO。
运行上面 的代码,用命令:cargo run
控制台将等待用户输入,用户这时输入一个数字,控制台将打印用户输入的数字。
我们来直接看最终的版本,代码如下:
use rand::Rng;
use std::cmp::Ordering;
use std::io;
fn main() {
println!("Guess the number!");
let secret_number = rand::thread_rng().gen_range(1, 101); //用库rand产生随机数(范围为:1~101)
loop {
//无限循环
println!("Please input your guess.");
let mut guess = String::new();
io::stdin()
.read_line(&mut guess) //等待用户输入,并绑定到guess变量
.expect("Failed to read line");
//对用户输入的数据进行处理,这里用模式匹配
let guess: u32 = match guess.trim().parse() {
Ok(num) => num,
Err(_) => continue,
};
println!("You guessed: {}", guess);
//对用户输入的数字和系统随机数字相对比较,这里也有模式匹配处理
match guess.cmp(&secret_number) {
Ordering::Less => println!("Too small!"),
Ordering::Greater => println!("Too big!"),
Ordering::Equal => {
//如果用户输入的数字刚好等于系统随机数,显示“You win!”,并跳出循环
println!("You win!");
break; //跳出loop
}
}
}
}
这个程序用了三个库:std::io, std::cmp::Ordering ,rand::Rng