猜数游戏案例
目标生成一个 1 到 100 之间的随机数,用户输入,然后机器提示大了,还是小了,知道正确。
换源
在使用 rust 开发的时候我们需要使用第三方包,如果从官网下载就太慢了,这时候我们可以将下载源换成国内的:
位置:
将 config.toml (没有就创建)中写入:
[source.crates-io]
replace-with = 'ustc'
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"
猜数游戏的代码
从代码中学习一些东西。通用的编程的概念后面会讲述。
use rand::Rng; // trait -> 接口
use std::cmp::Ordering;
use std::io;
fn main() {
// println! 是一个宏,! 表示调用宏而不是函数
// 宏: 一种在 Rust 代码中编写其他代码的方式
println!("猜数!");
println!("请输入你猜的数:");
let secret_number = rand::thread_rng().gen_range(1..101);
println!("随机数是:{}", secret_number);
// 循环执行
loop {
// 定义一个可变变量
// String::new() 返回一个新的空字符串
// ::new() 表示 new() 是 String 类型的一个关联函数
// 关联函数:不依赖于任何对象实例调用的函数,类似于静态方法,位于 impl 块中
let mut guess = String::new();
// 读取用户输入
// read_line() 将用户输入附加到字符串中,返回 io::Result 类型
// 返回值是一个枚举类型,io::Result 有两个成员:Ok 和 Err
// Ok 表示操作成功,Err 表示操作失败,Err 包含失败的信息
// 如果是 Ok,expect() 会返回 Ok 中的值
// 如果是 Err,expect() 会使程序崩溃,并显示 expect() 中的信息
io::stdin().read_line(&mut guess).expect("读取失败");
// 将字符串转换为数字
// trim() :去除字符串首尾的空白字符
// parse() :将字符串转换为数字
// 我们这里使用 match 来代替 expect(),处理 parse() 返回的 Result 类型
let guess: i32 = match guess.trim().parse() {
// parse() 返回一个 Result 类型
// Ok 表示转换成功,Err 表示转换失败
Ok(num) => num,
Err(_) => continue,
};
match guess.cmp(&secret_number) {
// Ordering 是一个枚举类型,有三个成员:Less、Greater、Equal
Ordering::Less => println!("太小了"),
Ordering::Greater => println!("太大了"),
Ordering::Equal => {
println!("猜对了");
break;
}
}
}
}
效果: