我正在用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();