[易学易懂系列|rustlang语言|零基础|快速入门|(23)|实战1:猜数字游戏]

时间:2022-03-11 20:00:16

[易学易懂系列|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

以上,希望对你有用。

如果遇到什么问题,欢迎加入:rust新手群,在这里我可以提供一些简单的帮助,加微信:360369487,注明:博客园+rust

参考文章:

https://doc.rust-lang.org/stable/book/ch02-00-guessing-game-tutorial.html