在Rust中将String类型的值解析为浮点类型的值时,"let pi: f64 = 3.14".parse().unwrap();
可以正常工作。
但是,当解析来自标准输入的String类型值时,即使它是完全相同的值,程序也会惊慌并抛出:
[主线程]对
Result::unwrap()
上的Err
感到惊慌值:ParseFloatError {类型:无效}',src / libcore / result.rs:999:5注意:使用RUST_BACKTRACE=1
环境变量运行以显示回溯。
我检查了值的类型,并且它是一个字符串,所以我不明白错误的含义,而且我无法找到与标准输入(stdin)特别相关的任何内容问题。还有其他人遇到吗?是否有防止恐慌的好方法?
这里有一些代码可以复制问题:
use std::io::{stdin,stdout,Write};
fn main() {
let mut s = String::new();
println!("Give a number ");
stdin().read_line(&mut s)
.expect("Did not enter a correct string");
let user_input: f64 = s.parse().unwrap();
println!("{:?}", user_input)
}
提前感谢!
意识到这是问题之后,我能够做一些更精确的谷歌搜索,发现this bit of Rust documentation解释了read_line()方法读取的内容
“所有字节,直到到达换行符(0xA字节)为止...找到后,全部直到
和包括为止的字节,分隔符(如果找到)将是附加...“