无法将字符串从stdin解析为浮点-Rust

问题描述 投票:0回答:2

在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)
}

提前感谢!

casting rust floating-point type-conversion
2个回答
0
投票
[SCappella指出存在一个换行符,导致类型转换失败,并且Jeff Muizelaar指出,向String“ s”添加trim()方法将删除换行符,从而解决了该问题。

意识到这是问题之后,我能够做一些更精确的谷歌搜索,发现this bit of Rust documentation解释了read_line()方法读取的内容

“所有字节,直到到达换行符(0xA字节)为止...找到后,全部直到

和包括为止的字节,分隔符(如果找到)将是附加...“
© www.soinside.com 2019 - 2024. All rights reserved.