String Rust:无法将整数解析为字符串、ParseInterr或
我刚开始尝试生锈,所以我实现了本书“猜谜游戏”的修改版本。每次我尝试输入数字时,程序都无法解析字符串中的整数: 猜一下数字! 输入您的猜测: 50 你猜了50 (4字节)! 线程“main”因“错误的数字格式”而惊慌失措:ParseInteror{kind:InvalidDigit}',src\libcore\result.rs:997:5 注意:使用'RUST_BACKTRACE=1'环境变量运行以显示回溯。 错误:进程未成功退出:`target\release\experience.exe`(退出代码:101) 下面应用的代码 我已经尝试了其他整数类型String Rust:无法将整数解析为字符串、ParseInterr或,string,rust,integer,String,Rust,Integer,我刚开始尝试生锈,所以我实现了本书“猜谜游戏”的修改版本。每次我尝试输入数字时,程序都无法解析字符串中的整数: 猜一下数字! 输入您的猜测: 50 你猜了50 (4字节)! 线程“main”因“错误的数字格式”而惊慌失措:ParseInteror{kind:InvalidDigit}',src\libcore\result.rs:997:5 注意:使用'RUST_BACKTRACE=1'环境变量运行以显示回溯。 错误:进程未成功退出:`target\release\experience.exe`
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);
}
}
}
}
使用std::io;
使用rand::Rng;
fn main(){
println!(“猜数字!\n请猜:”);
让mut guess=String::new();
设secnum=rand::thread\u rng().gen\u range(1101);
'br:loop{
匹配io::stdin()。读取行(&mut guess){
好(好)=>{
println!(“你猜了{}({}字节)!”,猜猜,好的);
让intguess=guess.parse::()
.expect(“错误的数字格式!”);
匹配secnum.cmp(&intguess){
std::cmp::Ordering::Less=>{
println!(“你的猜测更小!”);
}
标准::cmp::排序::更大=>{
println!(“你的猜测更大!”);
}
std::cmp::Ordering::Equal=>{
println!(“你猜对了!”);
打破'br;
}
}
}
错误(erro)=>{
println!(“未能读取行:{}!”,erro);
}
}
}
}
从read\u line
输出的字符串包含一个尾随的换行符,因此您需要将其去掉以解析数字。您可以使用trim\u end
(或者也可以使用trim
来处理前导空格):
read\u line
的结果包含导致分析错误的'\n'
字符。您只需调用string.clear()
即可重用相同的字符串。在这种IO代码中,每次分配一个新的字符串
实际上几乎没有什么影响。fs::read\u字符串也会这样做吗,比如包含\n字符?我在读这个文件
let guess: u8 = guess
.trim_end()
.parse()
.expect("Wrong number format!");