[易学易懂系列|rustlang语言|零基础|快速入门|(23)|实战1:猜数字游戏]
[易学易懂系列|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
本人精通java高并发,DDD,微服务等技术实践,专注java,rust技术栈。 本人姓名郭莹城,坐标深圳,前IBM架构师、咨询师、敏捷开发技术教练,前IBM区块链研究小组成员、十多年架构设计工作经验,《区块链核心技术与应用》作者之一, 现聚焦于:区块链创投与交易所资源对接和技术咨询。 工作微信&QQ:360369487,区块链创投与交易所资源对接,加我注明:博客园+对接,技术咨询和顾问,加我注明:博客园+顾问。想学习golang和rust的同学,也可以加我微信,备注:博客园+golang或博客园+rust,谢谢!