Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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
Input 从输入中读取整数并将其分配给变量_Input_Integer_Rust - Fatal编程技术网

Input 从输入中读取整数并将其分配给变量

Input 从输入中读取整数并将其分配给变量,input,integer,rust,Input,Integer,Rust,我一直在试图找到一种简单的方法来读取Rust中的变量,但到目前为止还没有任何运气。Rust Book中所有的例子都是关于字符串的。好吧,我找不到任何关于整数或浮点数的有用的东西。我在这台机器上没有Rust编译器,但部分基于这一点,你想要的是 let user_val = match input_string.parse::<i32>() { Ok(x) => x, Err(_) => -1, }; 或者,正如评论中所指出的 let user_val =

我一直在试图找到一种简单的方法来读取Rust中的变量,但到目前为止还没有任何运气。Rust Book中所有的例子都是关于字符串的。好吧,我找不到任何关于整数或浮点数的有用的东西。

我在这台机器上没有Rust编译器,但部分基于这一点,你想要的是

let user_val = match input_string.parse::<i32>() {
    Ok(x) => x,
    Err(_) => -1,
};
或者,正如评论中所指出的

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

…虽然您在整数大小和默认值方面的选择可能明显不同,并且您并不总是需要类型限定符::用于从赋值推断类型。

要读取用户输入,您总是读取一组字节。有时,您可以将这些字节解释为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);
}
请注意,没有进行用户友好的错误处理。如果读取输入或解析失败,程序就会陷入恐慌。运行该程序会产生:

美元/输入 41 你的号码加一是42
一组字节包含一个输入。在Rust中,您接受作为UTF-8字符串的输入。然后将字符串解析为整数或浮点数。通过简单的方式,您接受字符串并对其进行解析,然后为这两个字符串编写一个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);
}

这是一种处理错误、输入和解析数字的更长但更好的方法。

:字符串上的解析方法将字符串解析为某种类型的数字您不需要为类似的事情安装编译器-您已经介绍过。在这里使用将更为惯用:input_string.parse:.unwrap_或-1。您也可以使用此选项指定整数类型:input_string.parse.unwrap_或-1i32。@Shepmaster,两者都很有趣,谢谢!对我来说,打开包装或者看起来不那么习惯,但如果这就是社区的运作方式,那么它对我来说是有效的。