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
试着用调试器运行,这样你就可以看到每个变量的值,并检查它是否符合你的期望。
当出现问题时,您还可以记录相关变量。例如
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 );
如果你有任何意见,请随时在这里发布或给我发消息。