#0 前言

碎碎念

学rust可能和目前的任务没有关联,但是毕竟是编程原神,占个坑(

学习参考教程:https://www.bilibili.com/video/BV1m1sreSEoh

# 1 Rust 简介

rust 是一门低级别的系统语言

特点:性能、安全性、开发者友好、健壮的生态

  • 内存安全,不牺牲性能
  • 编译通过就能正常运行

# 2 Rust 程序结构

第一个项目

rust最终会创建crate,一个项目里包含:

​ 一个library crate (库crate)
​ 多个binary crate (可执行crate)

use std::io::stdin;

fn main() {
    let mut msg = String::new();
    println!("Please enter your message:");
    stdin().read_line(&mut msg).unwrap();
    println!("Message is {}", msg);
}
 

猜数字

导入库

Prelude:导入到每个rust程序的集合,可以直接使用而不用显式导入

use std::io;// 非prelude,需要显式导入

打印文本

println!("Guess the number");//宏

创建变量

let mut = String::new();

let:创建变量
mut:创建能多次赋值的变量

获取输入

io::stdin()
    .read_line(&mut guess)// 传入引用,返回Result类型
    .expect("Failed to read line");// 失败处理

Result:返回的result必须处理
— OK(usize)
— Err

导入rand库

/Cargo.toml

到[dependencies]加入:

rand = "0.8.5"

或者到终端使用

cargo add rand

获取库:crates.io网站获取

use rand::Rng;// Rng是trait(类似interface)

生成随机数

let secret_number = rand::thread_rng().gen_range(1..101);

范围表达式:

1…101:1\le num < 101

1…=100:1 \le num \le 100

类型转换

let guess:u32 = guess.trim().parse().expect("Please type a number!");

guess:u32:显式转换guess为u32类型(无符号整数类型)

shadowing(遮蔽):重新使用上面的guess变量

trim:去除空白

判断逻辑

use std::cmp::Ordering;

引入枚举Ordering

    match guess.cmp(&secret_number) {
        Ordering::Less => println!("Too small!"),
        Ordering::Greater => println!("Too big!"),
        Ordering::Equal => println!("You win!"),
    }

match:类似switch,匹配分支并执行

cmp:比较大小,返回guess相对给定数是大了还是小了

完整程序

use rand::Rng;
use std::cmp::Ordering;
use std::io;

fn main() {
    println!("Guess the number!");

    let secret_number = rand::thread_rng().gen_range(1..=100);
    //println!("The secret number is: {}", secret_number);

    loop {
        println!("Please input your guess.");
        let mut guess = String::new();

        io::stdin()
            .read_line(&mut guess)
            .expect("Failed to read line");

        let guess: u32 = match guess.trim().parse() {
            Ok(num) => num,
            Err(_) => {
                println!("Please type a number!");
                continue;
            }
        };
        println!("You guessed: {}", guess);

        match guess.cmp(&secret_number) {
            Ordering::Less => println!("Too small!"),
            Ordering::Greater => println!("Too big!"),
            Ordering::Equal => {
                println!("You win!");
                break;
            }
        }
    }
}

网站的管理员,似乎是个萌新🤔,CTBUer