Вот краткий пример программы, которая может обеспечить ввод ASCII от 1 до 4 включительно.
#include <exception>
#include <iostream>
#include <string>
int menu_selection() {
int choice = 0;
std::string input;
do {
std::cout << "\nWhich object would you like to measure:\n"
<< "1. Table\n"
<< "2. Stool\n"
<< "3. Bookshelf\n"
<< "4. Exit\n\n";
std::getline(std::cin, input);
// Handles the input of strings
std::string::size_type loc = 0;
try {
choice = std::stoi(input, &loc);
} catch (std::exception& e) { // std::stoi throws two exceptions, no need
// to distinguish
std::cerr << "Invalid input!\n";
continue;
}
// Handles decimal numbers
if (loc != input.length()) {
choice = 0;
}
// Handles the valid range
if (choice < 1 || choice > 4) {
std::cerr << "Invalid Input! Try again\n\n";
}
} while (choice < 1 || choice > 4);
return choice;
}
int main() {
int selection = menu_selection();
std::cout << "You chose " << selection << ".\n";
}
Этот код не относится к вашему классу мебели. Выбор мебели - это не «бытие». Меню и выбор должны быть вне класса, а затем вы делаете соответствующие вызовы для вашего класса мебели.
Еще один способ думать об этом - делиться классом Мебель с другими разработчиками. Может быть, им нет дела до измерения мебели. Но теперь вы навязали им это измерение, включив его в класс.