一次猜测

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use std::io;//prelude预导入

fn main() {
println!("猜数!");

println!("猜测一个数");

let mut foo =1 ;//加上mut后说明变量是可变的
let bar = foo;//rust里所有变量默认情况下是不可变的(immutable)

let mut guess = String::new();

io::stdin().read_line(&mut guess).expect("无法读取行");
//stdin()返回一个std::io::Stdin实例,该实例代表标准输入
/*read_line()方法从标准输入读取一行输入,将读取到的字符串存储在guess变量中
*同时返回一个io::Result<usize>,该类型表示一个结果,其中usize表示读取的字节数
*结果有OK和Err两种,分别对应成功和失败
*/
//引用在rust中也是默认不可变
//expect()方法如果读取失败,则返回一个错误信息
println!("你猜测的数是: {}", guess);//花括号插入参数值
}

生成保密数字

1
2
3
4
5
6
7
8
9
10
11
use std::io;//prelude预导入
use rand::Rng;//trait ,定义了随机数生成器需要实现的方法集合

fn main() {
println!("猜数!");

println!("猜测一个数");
//rand::thread_rng()返回一个随机数生成器
let secret_number = rand::thread_rng().gen_range(1, 101);
println!("神秘数字是: {}", secret_number);
}

比较猜测数字和保密数字的大小

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use std::io;//prelude预导入
use rand::Rng;//trait ,定义了随机数生成器需要实现的方法集合
use std::cmp::Ordering;

fn main() {
println!("猜数!");

println!("猜测一个数");
//rand::thread_rng()返回一个随机数生成器
let secret_number = rand::thread_rng().gen_range(1, 101);
println!("神秘数字是: {}", secret_number);
let mut guess = String::new();

io::stdin().read_line(&mut guess).expect("无法读取行");
//shadow,rust允许用同名的新变量来隐藏旧变量的值
let guess:u32=guess.trim().parse().expect("请输入一个数字");
println!("你猜测的数是: {}", guess);
match guess.cmp(&secret_number) {
Ordering::Less => println!("太小了!"),//arm,分支
Ordering::Greater => println!("太大了!"),
Ordering::Equal => println!("你猜对了!"),
}
}

多次猜测

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use std::io;//prelude预导入
use rand::Rng;//trait ,定义了随机数生成器需要实现的方法集合
use std::cmp::Ordering;

fn main() {
println!("猜数!");
//rand::thread_rng()返回一个随机数生成器
let secret_number = rand::thread_rng().gen_range(1, 101);
//println!("神秘数字是: {}", secret_number);
println!("猜测一个数");
loop{
let mut guess = String::new();

io::stdin().read_line(&mut guess).expect("无法读取行");
//shadow,rust允许用同名的新变量来隐藏旧变量的值
let guess:u32= match guess.trim().parse(){
Ok(num) => num,//解析成功
Err(_) => continue,//“_”表示忽略错误信息
};
println!("你猜测的数是: {}", guess);
match guess.cmp(&secret_number) {
Ordering::Less => println!("太小了!"),//arm,分支
Ordering::Greater => println!("太大了!"),
Ordering::Equal => {
println!("你猜对了!");
break;
}
}
}
}