Невозможно правильно проверить неверный ввод и принять правильные значения диапазона с C ++

0

Я - любительский практикующий код в C++, и я не могу заставить свой код работать правильно. Я надеюсь, что кто-то может найти мою проблему или указать мне в правильном направлении.

Я просто пытаюсь создать меню switch/case для пользователей. Я бы хотел, чтобы они не могли вводить какие-либо неправильные значения в качестве входных данных. единственные правильные значения - 1,2,3 или 4. Если введены какие-либо более низкие, более высокие или нечисловые значения, я бы хотел, чтобы они застревали в цикле, пока они не введут правильное значение.

Моя проблема с моей рабочей проверкой ошибок заключается в том, что когда они действительно вводят правильные значения, они все еще застревают в цикле?! Я попытался переставить мой код, но затем ошибка снова взорвет мою программу.

Спасибо за любой совет, ввод кода и т.д. Я понятия не имею, почему он не работает !!!

И по соответствующей заметке. У меня возникли проблемы с загрузкой моей загрузки jgrasp для работы C++, поэтому я загрузил компилятор с кодом code :: block. по какой-то причине он не может зарегистрировать команды системы ("")?! любые идеи или лучший компилятор будут оценены. Благодарю. о, и вот мой код для моей первой проблемы... после того, как код начинается с моего меню switch/case. Спасибо за любую помощь

int main()
{
string name;
int ans2, ans3, count = 0, extra, select = 1, arraycount = 0, choice;
bool flag = true;
cout << "Hello World" << endl;
cout << "Enter your name: ";
cin >> name;
cout << "Thank you for using this program " + name << endl;
while (select != 4)
{
cout << "MAIN MENU\n";
cout << "Please enter a corrisponding numeric for your selection.\n";
cout << "1. You are Michael...\n";
cout << "2. You are Tim\n";
cout << "3. You are someone else\n";
cout << "4. Program exit\n";
cout << "Enter your selection: ";
cin >> select;

do
{
while(!(cin >> select))
    {
    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cout << "Invalid input.  Try again: ";
}
cout << "You entered: " << select << endl;

if (select != 1 && select != 2 && select != 3 && select != 4)
{
    flag = false;
    cout << "Error. Please enter a valid selection.";
    cout << "Enter your selection";
    cin >> select;
}
else
    flag = true;


}while(flag == false);

cout << "\n\nThank you for your choice\n";
//system("pause");
//system("cls");
Теги:
validation

1 ответ

0
Лучший ответ

эта часть вашего кода,

if (select != 1 && select != 2 && select != 3 && select != 4)
{
    flag = false;
    cout << "Error. Please enter a valid selection.";
    cout << "Enter your selection";
    cin >> select;
}

эта часть может быть причиной вашей проблемы при повторном вводе выбора, но вы не изменяете значение флага. Вы можете добавить проверку, while(!(cin >> select)) как

 while(!(cin >> select) || select > 4 || select < 1)
  • 0
    я попытался добавить свои параметры! = один раз до этого. Я попробую это так. хотя сейчас ... это действительно сделало это! Я думаю, что, возможно, испортил свои & & s и скобки, когда я попробовал это раньше. Могу поспорить, что я все испортил. большое спасибо. Вы, сэр, оптимизировали мой код и сохранили мое здравомыслие!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню