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

C#密码检查器if语句对长输入不生效问题求助

密码检查器程序无响应问题分析与修复

问题描述

我在用C#编写一个密码检查器程序时遇到了奇怪的问题:输入较短的用户名和密码时程序能正常执行,但输入较长的内容时,程序似乎完全没反应,if语句无法对长输入进行验证。原始代码如下:

Console.Write("Set a username: ");
string username = Console.ReadLine();
Console.Write("Set a password: ");
string password = Console.ReadLine();
Console.WriteLine("Are you sure that you want these as your username and password? (Y/N)");
Console.Write("Enter here: ");
string decision = Console.ReadLine();
if (decision == "Y" || decision == "y") {
    Console.Write("Enter your username: ");
    string inputUser = Console.ReadLine();
    Console.Write("Enter your password: ");
    string inputPass = Console.ReadLine();
    if (inputUser == username && inputPass == password) {
        Console.WriteLine("Username and password match correctly! Restart the program to try again.");
    } else if (inputUser == username && inputPass != password || inputUser != username && inputPass == password) {
        int i = 0;
        while (inputUser == username && inputPass != password || inputUser != username && inputPass == password && i < 2) {
            Console.WriteLine("Username or password don't match correctly. Please try again.");
            Console.Write("Enter your username: ");
            inputUser = Console.ReadLine();
            Console.Write("Enter your password: ");
            inputPass = Console.ReadLine();
            i++;
            if (inputUser == username && inputPass == password) {
                Console.WriteLine("Username and password match correctly! Restart the program to try again.");
                break;
            }
            if (i >= 2) {
                Console.WriteLine("Too many attempts. Please restart program to try again.");
                break;
            }
        }
    }

Visual Studio没有给出任何错误提示,我完全不知道该怎么解决。


问题根源

其实这个问题和输入长度无关,核心是条件逻辑的漏洞和运算符优先级错误:

  • 条件覆盖不全:原始代码的else if只处理了“用户名正确但密码错误”或者“用户名错误但密码正确”这两种单错情况。如果用户输入的用户名和密码都错误,程序不会进入任何分支,直接执行完毕,看起来就像“没反应”。
  • 逻辑运算符优先级问题:&&的优先级高于||,所以你写的while循环条件会被错误解析,导致循环的触发逻辑和预期不符,进一步加剧了程序无响应的假象。

修复后的代码

我采纳了社区的建议,调整了条件逻辑,现在程序可以正常处理所有输入情况了:

Console.Write("Set a username: ");
string username = Console.ReadLine();
Console.Write("Set a password: ");
string password = Console.ReadLine();
Console.WriteLine("Are you sure that you want these as your username and password? (Y/N)");
Console.Write("Enter here: ");
string decision = Console.ReadLine();
if (decision == "Y" || decision == "y") {
    Console.Write("Enter your username: ");
    string inputUser = Console.ReadLine();
    Console.Write("Enter your password: ");
    string inputPass = Console.ReadLine();
    if (inputUser == username && inputPass == password) {
        Console.WriteLine("Username and password match correctly! Restart the program to try again.");
    } else {
        int i = 0;
        while (((inputUser == username && inputPass != password) || (inputUser != username && inputPass == password) || (inputUser != username && inputPass != password)) && i < 2) {
            Console.WriteLine("Username and/or password don't match correctly. Please try again.");
            Console.Write("Enter your username: ");
            inputUser = Console.ReadLine();
            Console.Write("Enter your password: ");
            inputPass = Console.ReadLine();
            i++;
            if (inputUser == username && inputPass == password) {
                Console.WriteLine("Username and password match correctly! Restart the program to try again.");
                break;
            }
            if (i >= 2) {
                Console.WriteLine("Too many attempts. Please restart program to try again.");
                break;
            }
        }
    }
}

关键修改点

  1. 将else if改为else,确保所有不匹配的情况(包括用户名和密码都错误)都能进入重试流程。
  2. 给while循环的条件加上括号,明确逻辑分组,避免运算符优先级导致的错误解析。
  3. 在while条件中加入(inputUser != username && inputPass != password),覆盖所有错误输入场景。
  4. 更新提示文本为更准确的“Username and/or password don't match correctly”。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 01:19:09