У меня есть система создания меню с циклом для проверки ввода. Когда на входе указано что-то вроде «2.4» или «2 4», он принимает «2» в качестве первого ввода, тогда я предполагаю, что «4» сохраняется в буфере и автоматически передается как следующий ввод без ожидания.
Эти два решения - самые близкие, которые я мог найти, но я не могу понять, как реализовать первое (даже не понимаю большинство из того, что они используют), а второе все еще принимает не-целые числа.
Принимать только целое число для ввода
Как заставить cin брать только цифры
соответствующий код (извините, все еще пытаюсь выяснить форматирование):
int menu(std::vector <std::string> options) //menu creation
{
int input; //user selection
bool check = false; //check for valid input
.
.
.
while(!check)
{
std::cin >> input;
if(std::cin.fail() || input <= 0 || input > static_cast<int>(options.size()))
{
std::cin.clear();
std::cin.ignore();
std::cout << wrongInput << std::endl;
}
else
{
check = true; //change flag for valid input
}
}
return input;
}
Я бы хотел, чтобы цикл полностью отвергал что-то не-int. Я попытался создать цикл, который проверял бы каждый символ последовательно, чтобы он принимал многозначные числа, а затем заканчивался пробелом "." или персонаж, но он был очень неуклюжим и все еще не работал должным образом.