You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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} 摄氏度");
}

关键修正说明

  1. 拆分变量:把模式选择和温度输入的变量分开(mode、celsius_input、fahrenheit_input),彻底避免内容拼接问题。
  2. 浮点数运算:用f32类型处理温度值,解决整数除法的精度丢失问题。
  3. 容错处理:用match替代if-else,新增无效输入的提示逻辑。
  4. 格式化输出:转换结果保留两位小数,显示更直观。

内容的提问来源于stack exchange,提问作者M4xu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 07:45:59