输入任意内容,并打印出来
main.rs:
use std::io; // 像String这些类型都在预先导入的prelude里,如果要使用的不在prelude里,则需要显式导入 fn main() { println!("猜数"); println!("猜测一个数"); let mut guess = String::new(); //String::new()返回一个String实例,创建一个空白的字符串 // 读取一行内容,放到guess里; (io::stdin()返回一个句柄) io::stdin().read_line(&mut guess).expect("无法读取行");// 引用在Rust里默认也是不可变的,所以需要&mut // {}为占位符,类似golang里的%s,%d println!("你猜测的数是:{}", guess) }
生成随机数
Cargo.toml
[package] name = "guessing_game" version = "0.1.0" edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] rand = "^0.3.14" # ^代表任何与0.3.14这个版本公共api兼容的版本都可以
rand包还依赖libc
use std::io; // 像String这些类型都在预先导入的prelude里,如果要使用的不在prelude里,则需要显式导入 use rand::Rng; // trait,类似golang的接口,定义了很多方法 fn main() { println!("猜数"); let secret_number = rand::thread_rng().gen_range(1, 101); // [a,b) println!("神秘数字是{}", secret_number); println!("猜测一个数"); let mut guess = String::new(); //String::new()返回一个String实例,创建一个空白的字符串 // 读取一行内容,放到guess里; (io::stdin()返回一个句柄) io::stdin().read_line(&mut guess).expect("无法读取行");// 引用在Rust里默认也是不可变的,所以需要&mut // {}为占位符,类似golang里的%s,%d println!("你猜测的数是:{}", guess) }
比较大小
use std::io; use std::cmp::Ordering; // 像String这些类型都在预先导入的prelude里,如果要使用的不在prelude里,则需要显式导入 use rand::Rng; // trait,类似golang的接口,定义了很多方法 fn main() { println!("猜数"); // i32 u32 i64,不指定则默认i32 let secret_number = rand::thread_rng().gen_range(1, 101); // [a,b) println!("神秘数字是{}", secret_number); println!("猜测一个数"); let mut guess = String::new(); //String::new()返回一个String实例,创建一个空白的字符串 // 读取一行内容,放到guess里; (io::stdin()返回一个句柄) io::stdin().read_line(&mut guess).expect("无法读取行");// 引用在Rust里默认也是不可变的,所以需要&mut // shadow, 隐藏;(用同名变量隐藏旧变量) // trim 去掉空格等 // parse 将字符创串装换为u32 类型 let guess: u32 = guess.trim().parse().expect("Please type a number!"); // {}为占位符,类似golang里的%s,%d println!("你猜测的数是:{}", guess); match guess.cmp(&secret_number) { Ordering::Less => println!("Too small!"), //arm,类似分支吧 Ordering::Greater => println!("Too big!"), //arm,类似分支吧 Ordering::Equal => println!("You win!"), //arm,类似分支吧 } }
做多次猜测,直到猜对
use std::io; use std::cmp::Ordering; // 像String这些类型都在预先导入的prelude里,如果要使用的不在prelude里,则需要显式导入 use rand::Rng; // trait,类似golang的接口,定义了很多方法 fn main() { println!("猜数"); // i32 u32 i64,不指定则默认i32 let secret_number = rand::thread_rng().gen_range(1, 101); // [a,b) println!("神秘数字是{}", secret_number); loop { println!("猜测一个数"); let mut guess = String::new(); //String::new()返回一个String实例,创建一个空白的字符串 // 读取一行内容,放到guess里; (io::stdin()返回一个句柄) io::stdin().read_line(&mut guess).expect("无法读取行");// 引用在Rust里默认也是不可变的,所以需要&mut // shadow, 隐藏;(用同名变量隐藏旧变量) // trim 去掉空格等 // parse 将字符创串装换为u32 类型 let guess: u32 = match guess.trim().parse() { // match,是rust错误处理的惯用方式 Ok(num) => num, Err(_) => continue, //_表示舍弃,不关心 }; // {}为占位符,类似golang里的%s,%d println!("你猜测的数是:{}", guess); match guess.cmp(&secret_number) { Ordering::Less => println!("Too small!"), //arm,类似分支吧 Ordering::Greater => println!("Too big!"), //arm,类似分支吧 Ordering::Equal => { println!("You win!"); break; } } } }