Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Rust:无法将整数解析为字符串、ParseInterr或_String_Rust_Integer - Fatal编程技术网

String Rust:无法将整数解析为字符串、ParseInterr或

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`

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

猜一下数字! 输入您的猜测: 50 你猜了50 (4字节)! 线程“main”因“错误的数字格式”而惊慌失措:ParseInteror{kind:InvalidDigit}',src\libcore\result.rs:997:5 注意:使用'RUST_BACKTRACE=1'环境变量运行以显示回溯。 错误:进程未成功退出:`target\release\experience.exe`(退出代码: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);
            }
        }
    }
}
使用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!");