这次代码编写设计到了很多内容,主要的内容已经在代码中写了注释,多多练习就能掌握这门编程语言
use std::io;//使用标准库
use rand::Rng;
use std::cmp::Ordering;//枚举类型,里面有三种结果
fn main(){//函数入口
println!("*****猜数字*****");//宏
let secret_number = rand::thread_rng().gen_range(1, 10);//thread_rng()是随机数生成器
// println!("随机数的值为:{}",secret_number);
loop {
//声明一个变量使用关键字let,mut表示变量可以被修改,guess表示变量名,后面的String::new()表示新字符串,new()可以理解为关联函数
let mut guess= String::new();
//调用标准库中的stdin()函数中的用法read_line(),对存储在guess中值进行读取,该函数会有两个返回值,{ok,err},如果读取出错,就会使用expect停止运行。
io::stdin().read_line(&mut guess).expect("读取出错啦");
//“{}”中括号是占位符,和c语言中的%d相似
//这是对于guess复用的一个变量转换,将i32的数字转化为u32,后面涉及到了match函数的用法
//将解析的数据的结果进行返回,如果是ok就将值返回给result这个枚举类型,如果是错误的数据类型,就继续后续代码
let guess:u32 = match guess.trim().parse(){
Ok(num)=>num,
Err(_)=>continue,
};
println!("我猜的数是{}",guess);
//对guess和secret_number进行比较,然后执行相应的结果
match guess.cmp(&secret_number) {
Ordering::Less =>println!("太小了"),
Ordering::Greater =>println!("太大了"),
Ordering::Equal => {println!("恭喜你猜对了");
break;
},
}
}
}
接下来说一些和逻辑有关的tip:
1.被猜的随机数不可以随这每一次循环而改变,应该数一轮循环结束(也就是当你结束游戏取得胜利后才可以发生改变),应该定义在循环外。
2.在调试过程中随机数可以输出到控制台,但是在设计及游戏中不需要打印。
3.在循环过程中的结束条件是猜对数字,需要使用match函数进行实现。