共计 2774 个字符,预计需要花费 7 分钟才能阅读完成。
cargo new guessing_game
创立我的项目
输出任意内容,并打印进去
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; | |
} | |
} | |
} | |
} |
本文由 mdnice 多平台公布
正文完