Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.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 在请求用户输入时,是否使用Interror?_Rust_User Input - Fatal编程技术网

Rust 在请求用户输入时,是否使用Interror?

Rust 在请求用户输入时,是否使用Interror?,rust,user-input,Rust,User Input,我有一个rust代码,它在循环中请求用户输入 use std::io; fn main() { let mut string = String::new(); loop { println!("Enter a value: "); let b = io::stdin().read_line(&mut string).expect("string"); let val: u32 =

我有一个rust代码,它在循环中请求用户输入

use std::io;

fn main() {
    let mut string = String::new();

    loop {
        println!("Enter a value: ");
        let b = io::stdin().read_line(&mut string).expect("string");
        let val: u32 = string.trim().parse().expect("Error");

        println!("You typed: {:?}", val);
    }
}
此代码在初始输入时工作,但在第二次出现恐慌并存在时输入值

线程'main'在'Error:parseInteror{kind:InvalidDigit}',src/main.rs:13:20处惊慌失措 注意:使用
RUST\u BACKTRACE=1运行环境变量以显示回溯


如何解决此问题?

您没有重置循环中的
字符串,因此,如果第一次输入10,第二次输入5,您的字符串实际上是
“10\n5”
,当然新行字符不是有效数字

编辑:要添加“如何解决此问题”-->请执行较小的步骤。如果解析失败,请打印出您试图解析的内容。

根据
std::io::stdin::read\u line
附加到缓冲区,因此对于第一次迭代
string
包含例如
100
,然后在第二次迭代中字符串将包含
100\n100
,并且\n不能作为int进行解析

您可以通过每次迭代清除字符串或简单地

use std::io;

fn main() {
  loop {
    let mut string = String::new();
    println!("Enter a value: ");
    let b = io::stdin().read_line(&mut string).expect("string");
    let val: u32 = string.trim().parse().expect("Error");

    println!("You typed: {:?}", val);
  }
}

这回答了你的问题吗?FWIW缓冲区在第一次迭代时可能是
100\n
,因为
read\u line
不会修剪尾随的换行符。OP在解析之前正确修剪。