use rand::Rng; use std::cmp::Ordering; use std::io; fn main() { let guess = rand::thread_rng().gen_range(1, 101);//生成随机数1~100,含左不含右 loop { let mut input = String::new();//听说没有gc的语言字符串是个大坑 println!("请输入你猜的数字。"); io::stdin().read_line(&mut input).expect("读取错误");//读取输入 let input: u32 = match input.trim().parse() {//转换为数字 Ok(num) => num, Err(_) => { println!("请输入数字!"); continue; }, }; println!("输入数字:{}", input); match input.cmp(&guess) {//模式匹配,目前还没看出和switch比有什么优点 Ordering::Equal => { println!("猜对了!"); break; } Ordering::Greater => println!("高了"), Ordering::Less => println!("低了"), } } }
对比C#,
1.use相当于using,引用各种库。
2.let有点像var,都可以推断类型,但是let可以声明类型,var只能推断。
3.符号::和.目前还没有介绍用法,看的有点乱。
4.符号&是引用,等后面介绍吧。
5.模式匹配,C#好像新版本也有了,不过目前没用到,现在感觉有点怪怪的。
6.符号println!是个宏,记下来等后面解释吧。
这段代码大概相当于c#里这样的:
1 using System; 2 3 namespace ConsoleApp1 4 { 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 Console.WriteLine("请输入你猜的数字。"); 10 int guess = new Random().Next(1, 101); 11 while (true) 12 { 13 string input = Console.ReadLine(); 14 if (int.TryParse(input, out int num)) 15 { 16 if (num > guess) 17 { 18 Console.WriteLine("高了"); 19 } 20 else if (num < guess) 21 { 22 Console.WriteLine("低了"); 23 } 24 else 25 { 26 Console.WriteLine("猜对了!"); 27 break; 28 } 29 } 30 else 31 { 32 Console.WriteLine("请输入数字!"); 33 continue; 34 } 35 } 36 37 } 38 } 39 }View Code
这是学习《Rust编程语言》第二章的内容记录