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

Rust中字符串比较始终返回false问题求助

问题原因

io::stdin().read_line(&mut userAttempt)会将用户输入的内容**连同末尾的换行符(\n)**一起存入字符串中。比如输入Miku后按回车,userAttempt实际是"Miku\n",而你定义的username是"Miku",两者自然不相等。

解决方案

处理输入字符串,去掉末尾的换行符或首尾空白字符,常用两种方式:

  • 使用trim():去掉字符串首尾的所有空白字符(包括换行、空格、制表符等),适合不需要保留首尾空格的场景。
  • 使用trim_end_matches('\n')或trim_end():只去掉末尾的换行符(trim_end()会去掉所有末尾空白),适合需要保留开头空格的场景。
修改后的代码
use std::io;

fn main() {
    let username = "Miku";
    let password = "password";

    loop {
        let mut user_attempt = String::new();
        let mut pass_attempt = String::new();

        println!("Enter username:\n> ");
        io::stdin().read_line(&mut user_attempt).expect("Failed to read line");
        // 去掉首尾空白,包括换行符
        let user_attempt = user_attempt.trim();

        println!("Enter password:\n> ");
        io::stdin().read_line(&mut pass_attempt).expect("Failed to read line");
        let pass_attempt = pass_attempt.trim();

        println!("{}", user_attempt == username);

        if user_attempt == username {
            println!("Got here!");

            if pass_attempt == password {
                println!("Logged in successfully.");
                break; // 登录成功后退出循环,避免无限循环
            }
        }
    }
}

额外提示:你代码开头定义的let mut username = String::new();和let mut password = String::new();被后面的同名变量覆盖了,可直接删除以避免冗余。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:05:49