试图从循环外部借用变量绑定

pit*_*ear 2 rust

我正在用Rust的Java教科书重写一个平均计算器.它使用循环来请求几个输入,但我认为我遇到了所有权问题(因为let grade循环内部存在问题),所以我试图更好地理解.

当我grade在循环外声明时,只记录第一个输入值:grade无论输入如何,每个后续值都变为0.如果我grade在循环内声明,则正确记录每个输入值.

有没有办法使用借用来让我grade在循环之外声明,并且仍然有这个小程序工作?

use std::io;

fn main() {
    let mut total: u32 = 0;
    let mut count: u32 = 0;
    let mut grade = String::new(); //This one

    while count < 5 {
        println!("Enter number:");

        io::stdin().read_line(&mut grade)
            .expect("failed.");

        let grade: u32 = match grade.trim().parse() {
            Ok(num) => num,
            Err(_) => 0,
        };

        total = total + grade;
        count = count + 1;
    }
    println!("Tot: {}\nAvg: {}", total, total as f64/count as f64);
}
Run Code Online (Sandbox Code Playgroud)

小智 6

read_line 附加到您正在读入的字符串,因此如果您输入1然后输入2,grade则会包含1\n2该效果.这不能解析为整数,因此下面的匹配将始终返回0.解决方案是在读取之前清空字符串:grade.clear();