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多平台公布