1

我正在尝试在 C# 中创建一个非常基本的登录系统,使用数组来比较用户名和密码。

我正在使用for()循环将用户提供的用户名和密码与我的数组中的用户名和密码进行比较。这是我的循环代码:

string user = null, usrpassword = null;
string[] usernames = {"admin", "guest"};
string[] userpasswords = {"adminpw", "guestpw"};

Console.Write("Username: "); //Username
user = Console.ReadLine();
Console.Write("Password: "); //Password
usrpassword = Console.ReadLine();
Console.WriteLine("Processing...");

for (int i = 0; i <= usernames.Length; i++)
{
    if (user == usernames[i] && usrpassword == userpasswords[i])
    {
        loginloop = false;
        Console.WriteLine("Login Successful.");
    }
    else if (i > usernames.Length)
    {
        //incorrect username
        Console.WriteLine("Incorrect username or password!");
    }
} //for-loop-end

我在构建时没有遇到任何语法错误,但是当它到达 for 循环时它崩溃并给我一个IndexOutOfRange异常。

4

2 回答 2

5

数组索引从 开始0并上升到Length - 1,因此您只想在迭代器小于 时继续循环Length

更改<=<

for (int i = 0; i < usernames.Length; i++)
{
    ...
}
于 2013-10-10T22:17:18.073 回答
1

您的 for 循环条件中只有一个“off by one”样式错误;

for (int i = 0; i <= usernames.Length; i++)

应该改为

for (int i = 0; i < usernames.Length; i++)

该数组是“零索引”,其中Length属性是从 1 计数到 的长度nLength在空数组的情况下,最终索引实际上是小于 1 或 0 的值。

于 2013-10-10T22:18:48.097 回答