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

Rust中If else语句做字符串比较时匹配失效如何解决?

问题原因

你的字符串比较版本始终返回0,核心问题是读取运算符输入时漏了去换行符的步骤:

  • read_line()方法会把用户敲击回车产生的换行符(Unix环境为\n,Windows环境为\r\n)和输入的内容一起存入字符串变量
  • 你处理两个数字输入时,都调用了.trim()去掉了首尾的换行、空白字符再解析成整数,所以数字解析逻辑是正常的
  • 但读取运算符存入op变量后,没有做任何去空白处理就直接传给了equation函数,此时op的实际值是"+\n"/"-\n"这类带换行的内容,和你代码里写的"+"/"-"等纯运算符字符串做相等判断永远不会成立,自然会走到最后else分支返回0。

你把运算符改成整数传参能正常运行,本质是整数解析前的trim步骤避开了换行符的干扰,和运算符本身用整数还是字符串类型无关。

修复方案

最简单的修复是传参前给运算符字符串做trim处理,把调用equation的代码改成下面这样即可:

println!("Your answer: {}", equation(num_1, op.trim().to_string(), num_2));

更符合Rust习惯的优化写法是把equation的运算符参数改成&str类型,避免不必要的字符串拷贝,同时用match替代多层if判断让逻辑更清晰,修改后的核心代码如下:

fn equation(num1: i64, op: &str, num2: i64) -> i64{
    match op {
        "+" => num1 + num2,
        "-" => num1 - num2,
        "*" => num1 * num2,
        "/" => num1 / num2,
        _ => 0
    }
}

// main函数中对应调用位置直接传trim后的字符串引用
println!("Your answer: {}", equation(num_1, op.trim(), num_2));

额外提示:当前除法逻辑没有处理除数为0的场景,输入除数为0时程序会直接崩溃,可以后续根据需求加错误处理逻辑完善。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:33:15