Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 尝试从循环外部借用变量绑定_Rust - Fatal编程技术网

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

Rust 尝试从循环外部借用变量绑定,rust,Rust,我正在用Rust重写Java教科书中的一个普通计算器。它使用一个循环来请求多个输入,但我认为我遇到了所有权问题(因为循环中有一个let grade),所以我试图更好地理解它 当我在循环外声明grade时,只记录第一个输入值:无论输入如何,每个后续的grade值都变为0。如果我在循环中声明grade,则每个输入值都会正确记录 有没有一种方法可以让我在循环之外声明grade,并且仍然可以使用这个小程序 use std::io; fn main() { let mut total: u32

我正在用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);
}
使用std::io;
fn main(){
设mut-total:u32=0;
让mut计数:u32=0;
让mut grade=String::new();//这个
当计数小于5时{
println!(“输入编号:”);
io::stdin().读取行(&mut grade)
.expect(“失败”);
let grade:u32=匹配grade.trim().parse(){
Ok(num)=>num,
误差()=>0,
};
总数=总数+等级;
计数=计数+1;
}
println!(“Tot:{}\nAvg:{}”,总计,总计为f64/计为f64);
}

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

这解决了问题,并教会了我一些关于阅读的知识。一流!