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

Rust中match匹配String失效问题及优化方法咨询

问题原因与解决方法

问题根源

std::io::stdin().read_line(&mut calc)会将用户输入的**换行符(\n,Windows下是\r\n)**也一并读取到字符串中。比如你输入sum后按回车,calc实际存储的内容是"sum\n",和match分支里的"sum"完全不匹配,因此每次都会命中默认分支返回0。

解决方法

最直接的方式是去掉字符串首尾的空白字符(包括换行、空格等),使用String的trim()方法即可:

use std::io;

// 补充示例函数实现,你可以替换成自己的逻辑
fn sum() -> i32 {
    10 + 20
}

fn subtraction() -> i32 {
    50 - 15
}

fn division() -> i32 {
    40 / 8
}

fn multiplication() -> i32 {
    6 * 7
}

fn main() {
    println!("Enter what type of calc u want: ");

    let mut calc = String::new();

    io::stdin().read_line(&mut calc).expect("Failed to read");

    println!("u selected: {}", calc);

    let result = match calc.trim() { // 用trim()去掉首尾空白,包括换行符
        "sum" => sum(),
        "subtraction" => subtraction(),
        "division" => division(),
        "multiplication" => multiplication(),
        _ => 0, // 这里简化为_即可,无需&_
    };

    println!("{}", result);
}

其他可选方案

如果你只想精确移除末尾的换行符(保留开头可能的空格),可以手动处理:

// 移除Unix风格的换行符\n
if let Some('\n') = calc.chars().next_back() {
    calc.pop();
}
// 移除Windows风格的回车符\r
if let Some('\r') = calc.chars().next_back() {
    calc.pop();
}

不过trim()方法更简洁通用,能自动处理所有类型的空白字符,推荐优先使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:25:30