【问题标题】:Rust: fail to parse integer to string, ParseIntError [duplicate]Rust:无法将整数解析为字符串,ParseIntError [重复]
【发布时间】:2019-08-21 15:18:22
【问题描述】:

我刚开始尝试 Rust,所以我实现了 Book 的“猜谜游戏”的修改版本。每次我尝试输入数字时,程序都无法从字符串中解析整数:

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

【问题讨论】:

  • read_line的结果中包含'\n'字符,导致解析错误。
  • 您可以调用string.clear() 重复使用相同的字符串。在这种 IO 代码中,每次分配一个新的String 确实影响很小。
  • fs::read_string 是否也这样做,比如包含 \n 字符?我正在阅读这个文件adventofcode.com/2020/day/1/input

标签: string rust integer


【解决方案1】:

read_line 的字符串输出包含一个尾随换行符,因此您需要将其去掉才能解析数字。您可以使用 trim_end 来做到这一点(或者也可以使用 trim 来处理前导空格):

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

【讨论】:

    猜你喜欢
    • 2021-04-23
    • 2012-10-21
    • 2020-02-22
    • 2020-02-27
    • 2019-11-05
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多