-
目标
生成一个1~100间的随机数
提示玩家输入一个猜测
输入后程序提示猜测是大了还是小了
如果正确了,打印出一个庆祝信息,程序退出
- 首先我们做一个单次猜测
use std::io;
use rand::Rng;
use std::cmp::Ordering;//枚举类型 分别是小于大于和等于
fn main() {
println!("猜数!! ");
let secret_number = rand::thread_rng().gen_range(1, 101);
println!("神秘数字为:{}", secret_number);
println!("猜测一个数: ");
//let foo = 1;//let为定义值操作
//let bar = foo;
//foo = 2;//报错 因为rust中被定义的变量不能改变类似java中的"常量"
let mut guess = String::new();//let mut所定义的变量就可以改变值
io::stdin().read_line(&mut guess).expect("无法读取行");//方法的参数是用引用进行传递的
//read_line()具有返回值 OK||Err expect函数若read_line()返回值为Err就输出内部字符串 OK就赋值给guess
let guess: u32 = guess.trim().parse().expect("Please type a number!");
//前面guess是新定义的整数类型 后面guess是就定义的字符串类型 trim是去掉两边空白 parse把字符串变为数值类型
println!("你猜的数是:{}", guess);
//String 和 io 均为库 ::代表库下的函数
match guess.cmp(&secret_number){//cmp返回的是Ordering类型
Ordering::Less => println!("Too small!"),
Ordering::Greater => println!("Too big!"),
Ordering::Equal => println!("You win!"),
}
}
这里需要注意的有几点:
1.cargo.toml必须要添加rand包的依赖
2.引入rand::Rng 和 std::cmp::Ordering
3.rust中允许在一个变量之后使用相同名字定义另一个变量,但两个变量需要进行赋值连接
4.match 配合 Ordering类型进行匹配(类似java中的switch)
- 接下来我们要实现可以连续猜测的代码(直到猜对才停止)
use std::io;
use rand::Rng;
use std::cmp::Ordering;//枚举类型 分别是小于大于和等于
fn main() {
println!("猜数!! ");
let secret_number = rand::thread_rng().gen_range(1, 101);
//println!("神秘数字为:{}", secret_number);
//使用loop进行无限循环
loop {
println!("猜测一个数: ");
//let foo = 1;//let为定义值操作
//let bar = foo;
//foo = 2;//报错 因为rust中被定义的变量不能改变类似java中的"常量"
let mut guess = String::new();//let mut所定义的变量就可以改变值
io::stdin().read_line(&mut guess).expect("无法读取行");//方法的参数是用引用进行传递的
//read_line()具有返回值 OK||Err expect函数若read_line()返回值为Err就输出内部字符串 OK就赋值给guess
let guess: u32 = match guess.trim().parse(){//使用match来处理错误
Ok(num)=>num,
Err(_)=>continue,
};
//前面guess是新定义的整数类型 后面guess是就定义的字符串类型 trim是去掉两边空白 parse把字符串变为数值类型
println!("你猜的数是:{}", guess);
//String 和 io 均为库 ::代表库下的函数
match guess.cmp(&secret_number){//cmp返回的是Ordering类型
Ordering::Less => println!("Too small!"),
Ordering::Greater => println!("Too big!"),
Ordering::Equal => {
println!("You win!");
break;
},
}
}
}
这里需要注意的是:
1.loop{} 进行无线循环
2.rust语言和其他语言一样break;跳出循环 continue;直接执行下一次循环
3.rust中处理错误一般使用match