C#如何:比较两个字符串值(1个用户输入,1个预设)

本文关键字:1个 用户 输入 两个 如何 比较 字符串 | 更新日期: 2023-09-27 18:06:16

基本大纲:
我目前正在尝试编写一个简单的程序,允许"用户"在控制台中"输入"密码,然后根据"预设"正确密码检查"他们的输入"。

  • 如果密码正确(显示正确信息(
  • 如果密码错误(显示错误信息(

错误:我知道问题出在哪里:
在第12行,我没有将"用户"输入与"预设"密码进行比较。但在做了一些研究之后,我没能找到可以比较这两个字符串的代码
由于此错误,第9行的"密码不正确"将不会显示。

有什么想法可以比较吗?

    static void Main(string[] args)
    {
        string correctpassword = "michael";
        string userinputpassword = "";
        bool validpassword = false;
        do
        {
            Console.WriteLine("Please Enter your password:");
            try
            {
                correctpassword = (Console.ReadLine());
                if (userinputpassword == correctpassword)
                    validpassword = true;
                else
                    validpassword = false;
            }
            catch
            {
                Console.WriteLine("Incorrect Password");
            }
        } while (!validpassword);
        Console.WriteLine("Login Successful, Your password is:" + correctpassword);
    } //End Main

C#如何:比较两个字符串值(1个用户输入,1个预设)

试着用调试器运行,这样你就可以看到每个变量的值,并检查它是否符合你的期望。

当出现问题时,您还可以记录相关变量。例如

try
{
  correctpassword = (Console.ReadLine());
  Console.WriteLine(string.Format("UserInput: {0}", userinputpassword));
  Console.WriteLine(string.Format("correctpassword: {0}", correctpassword));
  Console.WriteLine(string.Format("passwords match: {0}", correctpassword == userinputpassword));
  if (userinputpassword == correctpassword)
    ...

如果您使用这些日志记录语句运行代码,您应该会发现问题。correctPassword应该始终是"michael",但它将是用户输入的内容。userinputpassword应该是用户输入的内容,但始终为空。

您正在设置用户对变量correctPassword 的输入

correctpassword = (Console.ReadLine());

您应该将其分配给userinputpassword

userinputpassword = (Console.ReadLine());

如前所述,只有在try块中抛出异常时,才会执行Console.WriteLine("Incorrect Password");行。当密码不匹配时,不会抛出任何异常,因此不会执行。如果密码不匹配,您可以抛出-选择抛出异常,然后此代码就可以工作(sorta(。但是,这是一个糟糕的设计。用户输入错误的密码是一个正常的预期错误,而不是异常错误(请参阅Eric的博客,了解何时适用异常(。因此,最好只是将该行添加到其他块中。

此外,在您读取用户输入的行中,您的代码中有一个拼写错误。

 static void Main(string[] args)
    {
        string correctpassword = "michael";
        string userinputpassword = "";
        bool validpassword = false;
        do
        {
            Console.WriteLine("Please Enter your password:");
            userinputpassword = (Console.ReadLine()); //typo here
            if (userinputpassword == correctpassword) {
                validpassword = true;
            } else {
                validpassword = false;
                Console.WriteLine("Incorrect Password");
            }
        } while (!validpassword);
        Console.WriteLine("Login Successful, Your password is:" + correctpassword);
    } //End Main

话虽如此,请注意,这不是程序通常应该对用户进行身份验证的方式。对于你正在学习的玩具程序来说,你所做的一切都很好,这似乎是正确的,但在生产系统中,用户的密码根本不应该被存储。相反,您使用散列来确定用户的密码是否正确。

你的try/catch就像把翅膀粘在一块木头上。在你的脑海中,它可能会变成一只到处飞翔的优雅天鹅,但在现实生活中,它仍然只是一块木头。。好块。只有翅膀。人们会给你困惑的表情。

你想要的是琐碎地写为:

while(true) 
{
  Console.Write("Password: ");
  var pw=Console.ReadLine();
  if(pw==correctpw)
    break;
  else 
    Console.WriteLine("Incorrect password.");
}

不需要try/catch。这不是Java,在C#中,我们对异常代码使用异常。真想不到。

感谢所有提交我问题答案的人。你所有的答案都有助于完成并更正我的代码。

这是最终结果(完全工作(:

string correctpassword = "michael";
bool validpassword = false;
do
{
    Console.WriteLine("Please Enter your Password: ");
    var userinputpassword = Console.ReadLine();
    if (userinputpassword == correctpassword)
        validpassword = true;
    else
        Console.WriteLine("Incorrect Password.");
} while (!validpassword);
Console.WriteLine("Login Successful, Your password is: " + correctpassword );

如果你有任何意见,请随时在这里发布或给我发消息。