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
相关产品推荐
相关产品推荐

