Проверка пароля и логина
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Программа должна проверять логин, если тот правильный, то начать проверку пароля(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;
}
else {
cout << «Пользователь с таким логином не найден!»;
}
return 0;
}
Проблема в том, что после вызова
В буфере ввода остаётся символ перевода на новую строку ('\n')
Есть 2 варианта решения проблемы:
1) После cin >> user_log вызывать cin.ignore(), тем самым выбросив из внутреннего буфера символ перевода на новую строку:
2) Или заменить вызов cin >> user_log на вызов getline(cin, user_log), как вы это сделали в остальных участках кода. В данном случае функция getline автоматически вызовет cin.ignore() у себя «под капотом»:
Исправленный код (использовал вариант 2):
Спасибо большое! Теперь понял!