Как я могу исправить эту проверку имени пользователя в C # с обработкой файлов? - PullRequest
0 голосов
/ 13 марта 2019

Так что этот фрагмент кода является небольшой частью моей программы. По сути, он считывает файл информации о пользователе, в котором хранятся полные имена, банковские балансы, имена пользователей и пароли.

Мой вопрос: почему, когда я ввожу имя пользователя, которого НЕ в файле, оно выдает ошибку, когда есть оператор if, который говорит, что имя пользователя не найдено, а затем перейти к методу регистрации?

    public static int player;
    public static void Username_Check()
    {
        string[] str = File.ReadAllText(@"X:\btec computing\unit 1\C sharp\online_casino_prog\user_info.csv").Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
        string[] users = new string[str.Length];
        Console.WriteLine("Enter your username. ");
        string username = Console.ReadLine();
        bool user_found = false;
        for (int i = 0; i < (str.Length); i++)
        {
            string[] person = str[i].Split(',');
            if (person[2] == username)
            {
                Console.WriteLine("Welcome back {0}!", person[0]);
                user_found = true;
                player = i;
                Password_Check();
            }
        }
        if (user_found == false)
        {
            Console.WriteLine("Sorry, we could not find an account linked to the username '{0}', Please register an account with us! ",username);
            Register();
        }
    }

Это ошибка, которую я получаю:

Необработанное исключение: System.IndexOutOfRangeException: индекс находился за пределами массива. в online_casino_prog.Program.Username_Check () в X: \ btec computing \ unit 1 \ C sharp \ online_casino_prog \ online_casino_prog \ Program.cs: строка 58 в online_casino_prog.Program.Main (String [] args) в X: \ btec computing \ unit 1 \ C sharp \ online_casino_prog \ online_casino_prog \ Program.cs: строка 30

Этот фрагмент показывает CSV-файл, который я использую для отображения информации о пользователе. Форматируется так: имя, фамилия, имя пользователя, пароль, баланс

1 Ответ

0 голосов
/ 13 марта 2019

Ваш код может быть упрощен с помощью LINQ

var username = Console.ReadLine();
var lines = File.ReadAllLines("./pathtoyour.csv").Select(line => line.Split(',')); // reads all lines from your csv then each line is transformed into an array of strings
var user = lines.FirstOrDefault(line => line[2] == username); // gets the first occurrence of the username, if no user is found returns null, otherwise user variable will be an array with the row data 

if (user != null)
  Console.WriteLine("Call PasswordCheck()");
else
  Console.WriteLine("Call Register()");
...