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