Проверка пароля и логина

Программа должна проверять логин, если тот правильный, то начать проверку пароля(3 попытки), если неправильный выключиться. Сделал вроде всё правильно, но при введении правильного логина происходит следующее
—————Введите логин: itsme
—————Введите пароль: Вы ввели неправильный пароль! (почему появляется надпись «Вы ввели неправильный пароль!»?)
—————Осталось попыток: 2
—————Введите пароль:

include <iostream>

include <string>

using namespace std;

bool get_pass(int k)
{
string valid_pass = «qwerty123»;
string user_pass;
cout << «Введите пароль: »;
getline(cin, user_pass);
if (user_pass == valid_pass)
{
cout << «Вы ввели правильный пароль!» << endl;
return false;
}
else if (k > 0)
{
cout << «Вы ввели неправильный пароль!» << endl;
cout << «Осталось попыток: » << k << endl;
k--;
get_pass(k);
}
}

int main()
{
setlocale(0, «»);
string log = «itsme»;
string user_log;

cout << "Введите логин: ";
cin >> user_log;
if (user_log == log)
{
    int k = 3;
    get_pass(k);

}
else {
cout << «Пользователь с таким логином не найден!»;
}
return 0;
}

Проблема в том, что после вызова

cin >> user_log;

В буфере ввода остаётся символ перевода на новую строку ('\n')

Есть 2 варианта решения проблемы:
1) После cin >> user_log вызывать cin.ignore(), тем самым выбросив из внутреннего буфера символ перевода на новую строку:

cout << "Введите логин: ";
cin >> user_log;
cin.ignore();

2) Или заменить вызов cin >> user_log на вызов getline(cin, user_log), как вы это сделали в остальных участках кода. В данном случае функция getline автоматически вызовет cin.ignore() у себя «под капотом»:

cout << "Введите логин: ";
getline(cin, user_log);

Исправленный код (использовал вариант 2):

#include <iostream>
#include <string>
using namespace std;

void get_pass(int k)
{
    string valid_pass = "qwerty123";
    string user_pass;

    cout << "Введите пароль: ";

    getline(cin, user_pass);

    if (user_pass == valid_pass) 
    {
        cout << "Вы ввели правильный пароль!" << endl;
        return;
    }
    else if (k > 0) 
    {
        cout << "Вы ввели неправильный пароль!" << endl;
        cout << "Осталось попыток: " << k << endl;
        k--;
        get_pass(k);
    }
}

int main()
{
    setlocale(0, "");
    string log = "itsme";
    string user_log;

    cout << "Введите логин: ";
    getline(cin, user_log);

    if (user_log == log) 
    {
        int k = 3;
        get_pass(k);
    }
    else 
    {
        cout << "пользователь с таким логином не найден!";
    }

    return 0;
}

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.