有没有其他方法可以采用整数或浮点输入而不是字符串输入并将其转换?

时间:2019-08-19 05:53:59

标签: rust

直接输入整数和浮点输入时遇到麻烦。

我是Rust的初学者,在输入整数时遇到问题。我做了一些研究,但没有找到像C ++那样接受整数输入的直接方法。我只想知道,除了阴影外,还有没有其他可能的方法来接受整数输入而不是字符串输入。

let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("Error");
let input:i16 = input.trim().parse().unwrap();

2 个答案:

答案 0 :(得分:2)

您可以选择使用text_io板条箱来实现自己的目标。

您必须在 Cargo.toml 文件中包含板条箱名称和版本

[dependencies]
text_io = "0.1.7"

这是您想要的工作示例。

#[macro_use] 
extern crate text_io;
fn main() {
    let i: i32 = read!();
    print!("{}",i);
}

答案 1 :(得分:0)

@Faheem Uz Zaman建议使用text_io板条箱,这是一个很好的选择。但是,read!宏实际上确实执行了原始问题中的代码:将输入读取到字符串变量中,然后尝试将该字符串解析为i32。

为了将来自终端的输入解析为i32变量,需要实现一些错误处理。问题中的代码是完整的,并且可以处理整数输入,只要输入确实是整数即可。

text_io crate提供了一个try_read!宏,该宏允许错误的输入。这是一个如何实现try_read的示例!宏,它需要添加可以添加到原始问题的示例代码中的相同类型的错误处理:

use text_io::*;
fn main() {

    let i: i32 = match(try_read!()) {
        Ok(integer_read) => integer_read,
        Err(bad_string) => {
            eprintln!("Error: {}", bad_string);
            return;
        },
    };
    println!("{}",i);
}

可以使用?运算符来缩短此时间,该运算符需要调整main()的返回值:

use text_io::*;
fn main()-> Result<(), Error>{
    let i: i32 = try_read!()?;
    println!("{}",i);
    Ok(()) 
}

如果输入无法解析到i32,将打印分析错误消息。