首页 > 解决方案 > 如何修复数组和循环?

问题描述

我创建了一个用户登录和密码程序,用户必须输入用户名和密码。我在并行数组中有我的用户名和密码。如果用户第一次输入错误的用户名或密码,他们会收到一条消息,提示“用户名不正确再试一次”或“密码不正确再试一次”。

我的问题是,如果用户第一次输入错误的用户名,他们会收到错误消息,但如果用户第二次输入正确的用户名,他们仍然会收到错误消息。

我发现当他们第一次出错时,程序要求他们输入第二个用户名而不是第一个用户名。我该如何解决这个问题,以便程序让用户输入第一个用户名而不是要求第二个用户名?

// 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;
}

标签: c#

解决方案


如何使用字典将用户名和密码存储为键值对而不是将主题存储在两个单独的数组中?这样,您可以一步检查用户名和密码。

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;
}

推荐阅读