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

最新文章

  1. Codeforces Round #246 (Div. 2) A. Choosing Teams
  2. Knockout.js是什么?
  3. WebApi2官网学习记录---JSON与XML的序列化
  4. LogBoy 之Android Studio控制台输出日志太多清空
  5. error: ld returned 1 exit status 和 error:undefined reference
  6. vue 页面跳转的两种方式
  7. 金融量化分析【day112】:股票数据分析Tushare2
  8. 【Leetcode】无重复字符的最长子串
  9. 弱省胡策 Magic
  10. python 虚拟环境操作 virtualenv +virtualenvwrapper
  11. 什么是webpack?
  12. linux下安装vsftp(二)
  13. 给构造函数(constructor)创建对象(object)
  14. LevelDB场景分析2--Open
  15. Xcode的插件的路径
  16. 数据库SQL(1)
  17. java中Vector类的常用方法
  18. js判断上传文件的大小、类型、修改日期等信息
  19. 基于Spark Mllib,SparkSQL的电影推荐系统
  20. 一键结束port 5037占用

热门文章

  1. springboot使用elasticsearch的客户端操作eslaticsearch
  2. Vue-cli3性能优化
  3. Big Box
  4. [CF544D]Destroying Roads_最短路_bfs
  5. 16.Azkaban的安装
  6. Java判断指定日期是否为工作日
  7. 【LOJ】#3030. 「JOISC 2019 Day1」考试
  8. Dijkstra(模板)
  9. 后缀数组练习2:可重叠的k次最长重复子串
  10. 向量运算(lua,三维) 点乘、叉乘、模、夹角