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

Rust:无法将整数解析为字符串,ParseInteror[重复]

皇甫飞宇
2023-03-14

我刚刚开始尝试生锈,所以我已经实现了书的“猜测游戏”的修改版本。每次我试图输入数字,程序都无法从字符串中解析整数:

Guess the number!
Input your guess:
50
You guessed 50
 (4 bytes)!
thread 'main' panicked at 'Wrong number format!: ParseIntError { kind: InvalidDigit }', src\libcore\result.rs:997:5
note: Run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
error: process didn't exit successfully: `target\release\experiment.exe` (exit code: 101)

下面应用的代码。

我已经尝试了其他整数类型。

use std::io;
use rand::Rng;

fn main() {
    println!("Guess the number!\nInput your guess:");

    let mut guess = String::new();

    let secnum = rand::thread_rng().gen_range(1,101);

    'br: loop { 
        match io::stdin().read_line(&mut guess) {
            Ok(okay) => {
                println!("You guessed {} ({} bytes)!", guess, okay);

                let intguess = guess.parse::<u8>()
                    .expect("Wrong number format!");

                match secnum.cmp(&intguess) {
                    std::cmp::Ordering::Less => {
                        println!("Your guess is smaller!");
                    }
                    std::cmp::Ordering::Greater => {
                        println!("Your guess is bigger!");
                    }
                    std::cmp::Ordering::Equal => {
                        println!("You guessed right!");
                        break 'br;
                    } 
                }
            }
            Err(erro) => {
                println!("Failed to read the line: {}!", erro);
            }
        }
    }
}

共有1个答案

钱志
2023-03-14

read\u line输出的字符串包含一个尾随的换行符,因此您需要去掉它才能解析数字。您可以使用trim\u end(或者也可以使用trim来处理前导空格):

let guess: u8 = guess
    .trim_end()
    .parse()
    .expect("Wrong number format!");
 类似资料:
  • 我试图用localdate解析以下字符串:“04 Aug 2015”。 在尝试了DateTimeFormatters的一些变体之后,我在SO中寻找答案,并发现answer中给出的一些解析示例对我不起作用。经过进一步的研究,我发现Java14不能解析包含字符串月份的日期,如“jul”、“feb”。但在Java8&10中,它工作得完美无缺。 引发的异常是: 下面是在Java8/10上成功打印并在Jav

  • 从stdin读取输入将生成一个,但如何将其转换为整数?

  • 问题内容: 我有一个将存储Number对象的列表。该列表将通过分析字符串列表来填充,其中每个字符串都可以表示Number的任何子类。 如何将字符串解析为通用数字,而不是特定的整数或浮点数? 问题答案: 数字不能实例化,因为它是抽象类。我建议传入数字,但是如果您设置为字符串,则可以使用任何子类来解析它们, 要么 @请参阅NumberFormat

  • 问题内容: 我想将日期字符串解析为日期。我在寻找其他问题,但没有找到答案。 错误消息是java.text.ParseException:而且我不知道怎么了。 你能帮我吗。提前致谢。 编辑:好的。我将其翻译成英文,但是我仍然遇到同样的问题。我不想更改输入,因为它来自邮件数据库。还有其他想法吗? 我发现了问题。我是瞎子 来自数据库的St是,不是 谢谢。 问题答案: 在德语中,“欧洲中部时间”是“Mit

  • 问题内容: 我的输入是以2015年7月1日格式为“ 01-07-2015”的日期的字符串表示形式。我正在尝试将其解析为一个变量: 基于JavaDoc,我希望它能起作用。但是,我收到了一条非常友好和有用的信息: 由以下原因引起:java.time.DateTimeException:无法从TemporalAccessor获取LocalDate:{DayOfMonth = 1,MonthOfYear

  • 我的输入是2015年7月1日日期的字符串表示形式,格式为“01-07-2015”。我试图将其解析为变量: 基于JavaDoc,我希望这能起作用。然而,我收到了一条非常友好和有益的信息: 原因:java.time.DateTimeException:无法从TemporalAccessor获取LocalDate:{DayofMonth=1,MonthofYear=7,WeekBasedYear[Wee