程序1

hello-world

fn main() {
    println!("Hello, world!");
}

猜数版本1

获取用户输入

use std::io;

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

    println!("Please input your guess.");

    let mut guess = String::new();

    // 获取用户输入
    io::stdin()
        .read_line(&mut guess)
        .expect("Failed to read line");

    println!("You guessed: {}", guess);
}

猜数版本2

生成随机数

use std::io;
use rand::Rng; // 使用rand包的Rng接口定义

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

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

    println!("The secret number is: {}", secret_number);

    println!("Please input your guess.");

    let mut guess = String::new();

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

    println!("You guessed: {}", guess);
}

猜数版本3

处理比较输入

use rand::Rng;
use std::cmp::Ordering;  // 要用到标准包里面的比较接口
use std::io;

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

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

    // println!("神秘数字是: {}", secret_number.to_string());

    println!("请输入你猜测的数字:");

    let mut guess = String::new();

    io::stdin()
        .read_line(&mut guess)
        .expect("读取数据失败");

    println!("你猜测的数是: {}", guess);

    // 针对字符串进行比较
    match guess.cmp(&secret_number.to_string()){
        Ordering::Less => println!("太小了!"),
        Ordering::Greater => println!("太大了!"),
        Ordering::Equal => println!("你赢了!"),
    }
}

猜数版本4

转换输入为数字

use rand::Rng;
use std::cmp::Ordering;  // 要用到标准包里面的比较接口
use std::io;

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

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

    // println!("神秘数字是: {}", secret_number.to_string());

    loop {
        println!("请输入你猜测的数字:");

        let mut guess = String::new();

        io::stdin().read_line(& mut guess).expect("不能读取行!");

        let guess: u32 = guess.trim().parse().expect("请输入数字!");

        println!("你输入的是: {}", guess);

        match guess.cmp(&secret_number){
            Ordering::Less => println!("太小了"),
            Ordering::Greater => println!("太大了"),
            Ordering::Equal => {
                println!("你赢了");
                break;
            }

        }
    }
}

猜数版本5

处理程序崩溃情况

use rand::Rng;
use std::cmp::Ordering;  // 要用到标准包里面的比较接口
use std::io;

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

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

    // println!("神秘数字是: {}", secret_number.to_string());

    loop {
        println!("请输入你猜测的数字:");

        let mut guess = String::new();

        io::stdin().read_line(& mut guess).expect("不能读取行!");

        // 是一个Result,有 OK 和 Err 两种情况
        let guess: u32 = match guess.trim().parse() {
            Ok(num) => num,         // 可以转化为数字
            Err(_) => continue,     // 进入下一次循环
        };

        println!("你输入的是: {}", guess);

        match guess.cmp(&secret_number){
            Ordering::Less => println!("你输入的是: {} 太小了", guess),
            Ordering::Greater => println!("你输入的是: {} 太大了", guess),
            Ordering::Equal => {
                println!("你输入的是: {} 你赢了", guess);
                break; // 退出循环
            }

        }
    }
}