Есть функция для консольного приложения. Она должна возвращать 's' или 'h', если таковые символы были введены. Если же ввод не соответствует одному из них, то цикл повторяется. Проблема в том, что если было введено больше одного символа и первый символ это 's' или'h', то функция возвращает значение. Как изменить ее так, чтобы при количестве символов больше одного, значение В ЛЮБОМ СЛУЧАЕ не возвращалось?
char getChoice()
{
char choice;
while(choice != 'h' && choice != 's')
{
std::cout << "Hit or Stand?(h/s)...";
std::cin >> choice;
if (std::cin.fail())
{
std::cin.clear();
std::cin.ignore(32767,'\n');
}
std::cin.ignore(32767,'\n');
}
return choice;
}
Возвращать из функции символ в любом случаи нужно. Другое дело, если вы хотите продолжить цикл пока символ не будет одиночным. Если да, то так:
char getChoice()
{
char choice;
std::cout << "Hit or Stand?(h/s)...";
while ((std::cin >> choice && choice != 'h' && choice != 's')
|| std::cin.peek() != '\n')
{
std::cout << "Hit or Stand?(h/s)...";
if (std::cin.fail() )
{
std::cin.clear();
std::cin.ignore(32767, '\n');
}
std::cin.ignore(32767, '\n');
}
return choice;
}
std::cin.peek() выдает следующий символ буффера, но не считывает
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники