Rust温度转换程序出现ParseIntError错误求助
解决Rust温度转换程序中的ParseIntError问题
你遇到的ParseIntError { kind: InvalidDigit }错误,核心原因是重复使用同一个String变量choose,导致两次输入的内容拼接在一起,无法解析为合法整数。比如第一次输入1并回车,choose里存的是"1\n";第二次输入温度值(比如30)并回车,choose就变成了"1\n30\n",调用trim()后是"1\n30",这显然不是一个有效的整数,所以解析失败。
除此之外,代码还有几个需要修复的问题:
- 整数除法错误:
9/5和5/9在Rust整数运算中会直接取整(结果分别是1和0),导致转换公式完全失效,必须用浮点数运算保证精度。 - 类型不合理:温度可能出现负数(比如零下摄氏度),用
usize(无符号整数)会导致溢出或错误,推荐用浮点数类型。 - 输入处理不严谨:没有处理用户输入非1/2的情况,容错性差。
修正后的完整代码
use std::io; fn main() { let mut mode = String::new(); println!("选择转换模式:[1] 摄氏度转华氏度 | [2] 华氏度转摄氏度,请输入数字1或2"); io::stdin() .read_line(&mut mode) .expect("读取输入失败!"); match mode.trim() { "1" => { let mut celsius_input = String::new(); println!("请输入摄氏度数值:"); io::stdin().read_line(&mut celsius_input).expect("读取输入失败!"); let celsius: f32 = celsius_input.trim().parse().expect("请输入有效的数字"); ctof(celsius); } "2" => { let mut fahrenheit_input = String::new(); println!("请输入华氏度数值:"); io::stdin().read_line(&mut fahrenheit_input).expect("读取输入失败!"); let fahrenheit: f32 = fahrenheit_input.trim().parse().expect("请输入有效的数字"); ftpc(fahrenheit); } _ => println!("无效输入,请输入1或2") } } fn ctof(c: f32) { let fahrenheit = c * 9.0 / 5.0 + 32.0; println!("转换结果:{c} 摄氏度 = {fahrenheit:.2f} 华氏度"); } fn ftpc(f: f32) { let celsius = (f - 32.0) * 5.0 / 9.0; println!("转换结果:{f} 华氏度 = {celsius:.2f} 摄氏度"); }
关键修正说明
- 拆分变量:把模式选择和温度输入的变量分开(
mode、celsius_input、fahrenheit_input),彻底避免内容拼接问题。 - 浮点数运算:用
f32类型处理温度值,解决整数除法的精度丢失问题。 - 容错处理:用
match替代if-else,新增无效输入的提示逻辑。 - 格式化输出:转换结果保留两位小数,显示更直观。
内容的提问来源于stack exchange,提问作者M4xu
相关产品推荐
相关产品推荐

