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

Rust整数加法报错求助:读取用户输入后执行a+b出现类型不匹配

问题分析

你的猜测没错——当前代码里a和b被Rust自动推断为String类型,a + b触发的是字符串拼接操作,但Rust中字符串拼接要求右侧是&str类型(即字符串切片),所以编译器提示你借用b为&b。但这不是你要的整数加法,问题出在没有把用户输入的字符串转换成整数。

修复步骤

要实现整数加法,需要完成以下几步:

  • 初始化a和b为String类型(read_line方法需要接收&mut String作为参数)
  • 处理read_line返回的Result类型(不能直接忽略,否则会有编译警告)
  • 将输入的字符串解析为整数类型(比如i32,根据需求选择合适的整数类型)
  • 对解析后的整数执行加法运算
修正后的代码
use std::io;

fn main() {
    // 初始化可变字符串用于存储输入
    let mut a = String::new();
    let mut b = String::new();

    // 读取用户输入并处理可能的错误
    io::stdin().read_line(&mut a).expect("读取输入失败");
    io::stdin().read_line(&mut b).expect("读取输入失败");

    // 将字符串解析为整数,处理解析错误
    let a: i32 = a.trim().parse().expect("请输入有效的整数");
    let b: i32 = b.trim().parse().expect("请输入有效的整数");

    // 执行整数加法
    let c = a + b;
    println!("{}", c);
}
关键细节解释
  • String::new():创建空字符串用于接收输入
  • read_line:会把用户输入的内容(包括换行符\n)写入字符串,所以用trim()去掉前后空白字符(包括换行)再解析
  • parse::<i32>():将字符串解析为32位有符号整数,你可以根据需求换成u32(无符号)、i64等其他整数类型
  • expect():如果出现错误(比如输入不是整数、读取失败),会打印提示信息并终止程序,新手阶段用这个简单直观,后续可以用match做更优雅的错误处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:51:16