试图从循环外部

时间:2016-08-17 18:37:30

标签: 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);
}

1 个答案:

答案 0 :(得分:6)

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