Rust中字符串解析为usize始终报错,请求协助排查
问题原因
你遇到的问题是因为read_line会把用户输入时按下的**换行符(\n)**也一并读取到字符串里。比如你输入5并回车,input变量实际存储的是"5\n",这个带换行的字符串无法被parse::<usize>()成功解析,所以每次都会进入错误分支返回None。
修复方案
在解析前,先对输入字符串调用trim()方法,去掉首尾的空白字符(包括换行符、空格等),这样就能得到纯数字的字符串,再进行解析就没问题了。
修正后的代码示例:
use std::io; fn main() { print!("Enter a square: "); loop { io::stdout().flush().expect("Flush Error"); let mut input = String::new(); io::stdin().read_line(&mut input).expect("Input Error"); // 先trim掉首尾空白(包括换行符) let trimmed_input = input.trim(); match trimmed_input.parse::<usize>() { Ok(num) => { // 拿到有效数字,执行后续游戏逻辑 println!("You selected square: {}", num); break; // 这里可根据游戏逻辑调整是否退出循环 }, Err(_) => { print!("Invalid input. Try again: "); } } } }
额外优化提示
- 直接匹配
parse的结果,省去额外的Option变量,逻辑更简洁 trim()还能处理用户输入时不小心多打的空格,让输入校验更鲁棒
内容的提问来源于stack exchange,提问作者Maximos
相关产品推荐
相关产品推荐

