Я снимаю видео со своей веб-камеры, и если пользователь нажимает клавишу Enter, я делаю снимок. Затем я спрашиваю: «Фотография в порядке?» пользователю и дождаться ввода. Если он говорит «Нет», я продолжаю делать то же самое, пока он не скажет «Да».
Но если он говорит «Нет», а тем временем я что-то набираю в терминале, функция getline() записывает все, что я набираю, в свой буфер, и когда я снова задаю вопрос, она сразу переходит в состояние «неверный ввод».
Как предотвратить это?
Я прочитал много вопросов по этому поводу и пытался использовать cin.ignore() и cin.clear() до/после вызова getline(), но они не помогли.
// Do capturing here
string choice;
int choiceIsOkay = 0;
while (choiceIsOkay == 0)
{
cout << "Is the picture okay? (Y/N): ";
getline(cin, choice);
if ((choice == "Y") || (choice == "y"))
{
choiceIsOkay = 2;
}
else if ((choice == "N") || (choice == "n"))
{
choiceIsOkay = 1;
}
else
{
cout << "\nInvalid input\n";
choiceIsOkay = 0;
}
}
if (choiceIsOkay == 2)
{
runAlgorithm = 1;
break;
}
else choiceIsOkay = 0;