【发布时间】: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