2024-04-18发表2024-09-08更新 anka 6 分钟读完 (大约882个字)0次访问Rust猜数游戏123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104use std::io; // prelude 序曲use rand::Rng; // trait 是其他语言的接口,上面有很多方法use std::cmp::Ordering; // 是一个枚举类型,有三个值,大于,小于,和等于// rust的库称为crate,crate是一个二进制或库,库是一个包含函数和其他代码的包,二进制crate是一个可以被执行的包,每个crate都有一个crate root,这是一个源文件,编译器从这个文件开始并编译整个crate,crate root是一个源文件,而不是一个目录,一个crate可以包含多个库,但只能包含一个二进制crate// crate分为二进制crate还有lib库,二进制crate是一个可以被执行的包,lib库是一个包含函数和其他代码的包,但不能被执行,只能被其他crate引用 fn main() { println!("猜数!"); // rng是个接口,上面一个函数gen_range,范围是1-100,包括1,不包括101 let secret_number = rand::thread_rng().gen_range(1..101); // println!("神秘数字是:{}!", secret_number); // 使用loop循环,无限循环,直到猜对为止 loop{ println!("猜测一个数:"); // let mut foo = 1; // let bar = foo; // immutable // 要表示0到100的范围,使用u32,无符号32位整数,默认是i32,有符号32位整数,也可以i64 let mut guess = String::new(); // 产生Stdin实例,存句柄,用read_line方法用可变的字符串参数获取输入,前面&表示是引用传递参数,引用默认是不可变的,需要加入mut参数,readline返回Result类型变量,是枚举类型,值称为变体,两个变体:ok和err,ok变体包含一个元组,元组的第一个元素是一个引用,指向一个字符串,这个字符串是readline方法读取的内容,err变体包含一个错误值 // Result上还定义了方法expect,如果是ok,则这个方法会提取里面的值,如果返回err,则expect会使程序崩溃,并显示传递给expect的参数,显示失败原因 // 不调用expect方法也行,但是会出现警告,安全性保证 io::stdin().read_line(&mut guess) .expect("无法读取行"); // rust允许使用同名的新变量来隐藏之前的变量 // trim方法去掉字符串前后的空白字符,parse方法将字符串转换为数字,parse方法返回Result类型,所以需要expect方法 let guess:u32 = match guess.trim().parse(){ Ok(num) => num, Err(_) => continue, }; // parse方法将字符串转换为数字,parse方法返回Result类型,所以需要expect方法 // 声明u32是为了告诉parse()方法,我们想要一个u32类型的数字,如果不声明,parse()方法会返回一个通用数字类型,这样就需要告诉编译器我们想要的类型 // 这之后的guess是一个新的变量,是一个u32类型,之前的guess是一个字符串类型 // 花括号是后面变量的值,用来在字符串中插入变量值 println!("你猜测的数是: {}", guess); // 方法guess.cmp,compare,三种情况,使用一个枚举类型 // match表达式,根据后面返回值决定做什么,多个手臂arm组成,每个手臂都有一个匹配的模式,匹配上就执行操作 // 如果match紧跟着的某个值和某个手臂的模式匹配,就会执行这个手臂的代码块 // 静态强类型语言 match guess.cmp(&secret_number){ Ordering::Less => println!("太小了!"), // arm Ordering::Greater => println!("太大了!"), Ordering::Equal => { println!("猜对啦!"); break; }, } }}Rust猜数游戏https://mxts.jiujiuer.xyz/2024/04/17/猜数游戏/作者anka发布于2024-04-18更新于2024-09-08许可协议