Простой вход в C# с 3 попытками

Мне нужно создать простую программу C# Sharp, которая принимает в качестве входных данных идентификатор пользователя и пароль (строка типа). После 3-х неправильных попыток пользователь должен быть отклонен.

Я начал, но я не уверен, как правильно реализовать логику.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace UserId
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Type username");
            String UserId1 = Console.ReadLine();
            Console.WriteLine("Type password");
            String Pass = Console.ReadLine();

            String UserIdCorrect = "test1";
            String PassCorrect = "password1";
            int MaxAttempts = 3;



            Console.ReadKey();

            if (UserId1 != UserIdCorrect && Pass != PassCorrect ) {
                MaxAttempts++;

            }


            Console.ReadKey();

        }
    }
}

person sylvann    schedule 29.11.2016    source источник
comment
Добро пожаловать в Stack Overflow. Это похоже на курсовую работу, попробуйте сначала решить ее самостоятельно.   -  person Prisoner    schedule 29.11.2016
comment
Вы научились структурировать поток программы?   -  person Mong Zhu    schedule 29.11.2016
comment
Пара указателей: вам нужен цикл while. Кроме того, вам нужно сохранить текущее количество попыток и сравнить его с максимальным количеством попыток. Вы не должны увеличивать MaxAttempts.   -  person HebeleHododo    schedule 29.11.2016
comment
Вот решение с использованием for stackoverflow.com/a/36399680.   -  person HebeleHododo    schedule 29.11.2016
comment
@HebeleHododo: я бы предпочел поставить его в цикл for (поскольку у нас 3 попыток): либо мы break цикла с правильным паролем, либо завершим цикл, не сумев войти в систему   -  person Dmitry Bychenko    schedule 29.11.2016
comment
@DmitryBychenko ага. Это тоже хорошо.   -  person HebeleHododo    schedule 29.11.2016
comment
Спасибо @HebeleHododo, что помогли   -  person sylvann    schedule 29.11.2016


Ответы (3)


Прежде всего, даже прежде чем писать хоть одну строчку кода, попробуйте подумать о соглашениях об именах на минуту или две. Это все равно, что «намазать лицо пеной перед бритьем. Вы можете побриться и без пены для бритья, но опыт будет не очень приятным». Попробуйте эту ссылку для получения дополнительной информации [https://msdn.microsoft.com/en-us/library/ms229045(v=vs.110).aspx].

Теперь переходя к вашему вопросу, если мне нужно только выполнить ваше требование, этого кода будет достаточно. Здесь я беру «действительный» в качестве идентификатора правильных учетных данных:

<code>
    //Login Attempts counter
    int loginAttempts = 0;

    //Simple iteration upto three times
    for (int i = 0; i < 3; i++)
    {
        Console.WriteLine("Enter username");
        string username = Console.ReadLine();
        Console.WriteLine("Enter password");
        string password = Console.ReadLine();

        if (username != "valid" || password != "valid")
            loginAttempts++;
        else
            break;
    }

    //Display the result
    if (loginAttempts > 2)
        Console.WriteLine("Login failure");
    else
        Console.WriteLine("Login successful");

    Console.ReadKey();
</code>
person iSahilSharma    schedule 29.11.2016
comment
Спасибо @iSahilSharma, который также отвечает на мой вопрос, и совет действительно полезен :) - person sylvann; 29.11.2016
comment
Я хотел бы дать этому больше, чем один голос. Этот ответ был идеальным. - person Diana; 20.09.2018

Просто запустите цикл for 3 раза, и если пользователь все еще вводит неправильную запись, просто отключите окно.

person Mamta    schedule 29.11.2016

Я думаю, вы новичок. Я прокомментировал код.

int maxAttempts = 3;

// looping n (maxAttempts) times
for(int i = 0; i < maxAttempts; i++)
{
    // get input and check it
}

// do what ever you want here.
// at least show up a message

Много способов. Как прокомментировал HebeleHododo, вы также можете использовать цикл while и проверить с помощью if-else, достигнут ли ваш maxAttempts.

person C4d    schedule 29.11.2016
comment
Петля ничего слишком жестока. Что, если я запустил программу по ошибке? Просто return с соответствующим сообщением. - person Dmitry Bychenko; 29.11.2016
comment
Если вход в систему должен завершиться неудачей после 3 попыток, я бы предпочел заставить пользователя также закрыть приложение вручную, а не нажимать клавишу ввода, и оно закрывается. Дело вкуса. В любом случае сообщение должно обязательно отображаться. Отредактировано, чтобы удовлетворить вас ;) - person C4d; 29.11.2016
comment
Спасибо @C4u, теперь все готово, и да, я только начал работать с C#. - person sylvann; 29.11.2016