从输入中读取整数并将其赋值给变量

时间:2015-07-05 21:54:19

标签: input integer rust

我一直试图找到一种简单的方法来读取Rust中的变量,但到目前为止还没有运气。 Rust Book中的所有示例都处理字符串AFAIK,我无法找到有关整数或浮点数的任何内容。

3 个答案:

答案 0 :(得分:4)

我在这台计算机上没有Rust编译器,但部分基于this answer接近,你需要类似......

let user_val = match input_string.parse::<i32>() {
    Ok(x) => x,
    Err(_) => -1,
};

或者,正如评论中指出的那样,

let user_val = input_string.parse::<i32>().unwrap_or(-1);

...虽然您在整数大小和默认值中的选择可能明显不同,但您并不总是需要parse()的类型限定符(::<i32>),其类型可以是从作业中推断出来。

答案 1 :(得分:4)

要读取用户输入,您始终会读取一组字节。有时,您可以将这些字节解释为UTF-8字符串。然后,您可以进一步将字符串解释为整数或浮点数(或许多其他内容,如IP地址)。

以下是读取单行输入并将其解析为32位有符号整数的完整示例:

use std::io;

fn main() {
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Not a valid string");
    let input_num: i32 = input.trim().parse().expect("Not a valid number");
    println!("Your number plus one is {}", input_num + 1);
}

请注意,没有用户友好的错误处理。如果读取输入或解析失败,程序就会引起恐慌。运行程序会产生:

$ ./input
41
Your number plus one is 42

答案 2 :(得分:0)

一组字节包括一个输入。在Rust中,您将输入接受为UTF-8 String。然后,将字符串解析为整数或浮点数。您可以通过简单的方式接受字符串并对其进行解析,然后为这两个字符串编写Expect''语句,以向用户显示一条消息,当程序在运行时出现紧急情况时出了什么问题。

fn main() {
    let mut x = String::new();
    std::io::stdin().read_line(&mut x)
        .expect("Failed to read input.");
    let x: u32 = x.trim().parse()
        .expect("Enter a number not a string.");
    println!("{:?}", x);
}

如果程序无法解析输入的字符串,则会出现恐慌并显示错误消息。请注意,该程序仍然会出现紧急情况,因此我们无法完美地处理错误。需要注意的另一件事是,由于变量屏蔽功能,我们可以使用相同的变量名x而不是某些x_int。为了更好地处理错误,我们可以使用match构造。

fn main() {
    let mut x = String::new();
    match std::io::stdin().read_line(&mut x) {
        Ok(_) => println!("String has been taken in."),
        Err(_) => {
            println!("Failed to read input.");
            return;
        },
    };
    let x: u32 = match x.trim().parse() {
        Ok(n) => {
            println!("Converted string to int.");
            n
        },
        Err(_) => {
            println!("Failed to parse.");
            return;
        },
    };
    println!("{:?}", x);
}

这是更长的方法,但是是处理错误以及输入和解析数字的更好的方法。