c# - 如何修复数组和循环?
问题描述
我创建了一个用户登录和密码程序,用户必须输入用户名和密码。我在并行数组中有我的用户名和密码。如果用户第一次输入错误的用户名或密码,他们会收到一条消息,提示“用户名不正确再试一次”或“密码不正确再试一次”。
我的问题是,如果用户第一次输入错误的用户名,他们会收到错误消息,但如果用户第二次输入正确的用户名,他们仍然会收到错误消息。
我发现当他们第一次出错时,程序要求他们输入第二个用户名而不是第一个用户名。我该如何解决这个问题,以便程序让用户输入第一个用户名而不是要求第二个用户名?
// The available usernames and passwords a user can input
string[] username = {"BUL","GVL","UDF","RFT","WDR" };
int[] password = {100, 200, 300, 400, 500 };
Console.WriteLine("\nUsername,Password \nBUL,100 \nGVL,200 \nUDF,300 \nRFT,400 \nWDR,500 ");
// Loop for Username Input
for (int i = 0; i < username.Length; i++)
{
Console.WriteLine("Enter Username");
string inputUsername = Console.ReadLine();
// if user type a wrong username, they need to try again
if (username[i] != inputUsername)
{
Console.WriteLine("Incorrect Username, Try again");
}
else
break;
}
解决方案
如何使用字典将用户名和密码存储为键值对而不是将主题存储在两个单独的数组中?这样,您可以一步检查用户名和密码。
Dictionary<string, string> dic = new Dictionary<string, string>
{
{ "BUL", "100" },
{ "GVL", "200" },
{ "UDF", "300" },
{ "RFT", "400" },
{ "WDR", "500" }
};
while(true)
{
Console.WriteLine("Enter Username");
string inputUsername = Console.ReadLine();
Console.WriteLine("Enter Password");
string pass = Console.ReadLine();
if (!dic.Contains(new KeyValuePair<string, string>(inputUsername, pass)))
Console.WriteLine("Incorrect Username/password, Try again");
else break;
}
推荐阅读
- angular - 在 inetllij idea 中使用 Karma 运行 Angular 测试
- java - com.fasterxml.jackson.databind.exc.MismatchedInputException:无法构造 java 类的实例
- arrays - 将数组作为参数传递给方法
- ios - 位码未包含在我的框架中
- javascript - 带有承诺的条件可观察调用
- c# - 如何在已经注册的 IHttpClient 上注册 Polly
- android - 找不到样式:找不到符号变量
- node.js - 我已经在我的电脑上安装了 gatsby,但我仍然收到一条错误消息
- php - Laravel Eloquent ORM 工厂:当我用工厂创建模型时,会在 afterCreating 之前调用 afterMaking;
- http - QUIC 连接迁移实际上是如何工作的?