当前位置: 首页 > 知识库问答 >
问题:

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

湛光明
2023-03-14

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

共有3个答案

唐增
2023-03-14

一组字节包含一个输入。在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,因为变量阴影特性。为了更好地处理错误,我们可以使用匹配构造。

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

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

包德业
2023-03-14

要读取用户输入,您总是读取一组字节。有时,您可以将这些字节解释为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
邢博文
2023-03-14

我在这台机器上没有生锈编译器,但是部分基于这个答案,你想要像...

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

或者,正如评论中所指出的,

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

...虽然您在整数大小和默认值方面的选择可能明显不同,并且您并不总是需要该类型限定符(::

 类似资料:
  • 问题内容: 当我尝试从使用PyQt5 Designer创建的qtextedit中获取文本时,出现错误或“ Python停止工作”,并且脚本自动停止。我尝试了多种解决方案,但没有任何效果。我必须将文本从qtextedit分配给变量,以检查进程是否运行。那是PyQt5生成的代码: 此处的按钮代码: 这里的代码用于从文本框中获取文本并分配给变量: 结束码: 问题答案: 没有任何方法,如果要获取必须使用的

  • 问题内容: 如何使用Go中的函数从标准输入获取整数输入? 如果使用无法完成此操作,那么读取单个整数的最佳方法是什么? 问题答案: http://golang.org/pkg/fmt/#Scanf Go中包含的所有库都有充分的文档记录。 话虽如此,我相信 绝招

  • 问题内容: 我为IA32编写了以下汇编脚本。应该从stdin读取一个数字,将其递增并打印到stdout,但是它的行为不符合预期,它不会打印任何内容(也许从stdin的读取不会终止,或者打印有问题吗?) 看到错误了吗?对于任何帮助,我要先感谢您, 祝一切顺利,西蒙 问题答案: 这部分都是错误的。您无法将读取结果存储在寄存器中。这实际上是在将结果存储在%edi中包含的地址中,由于您没有设置它,所以可能

  • 问题内容: 我无法从MySQL表的字段中仅将日期分配给php变量。我正在使用 PHP 4 ,我知道如何在PHP 5中做到这一点。 有人可以帮忙,有关以下php代码缺少的内容。 问题答案: 如果只想 显示 日期部分,则可以使用该类: //针对双回声错别字进行了编辑。

  • 问题内容: 为什么以下代码无法编译 但是以下确实可以编译 在这两种情况下,我不只是将整数值分配给char吗? 问题答案: 可以将A 分配给不带强制转换的,因为这是扩大的转换。反之,将a 转换为a 需要转换,因为这是缩小的转换。 另请参见JLS。第5章。转换和升级。

  • 问题内容: 在Python中,可以分割字符串并将其分配给变量: 但在Go中似乎无效: 问题: 如何在一个步骤中拆分字符串并分配值? 问题答案: 例如两个步骤 输出: 例如一个步骤 输出: