Ваши условия цикла искажены.
Вы проходите цикл, только если выбрано 3, 4, 5, ... (из-за selection > 2
) или если selection
равно 0, -1, -2, ... (из-за selection < 1
).Таким образом, вы никогда не попадете ни в if
;вы идете на else
.Затем вы безоговорочно вводите новый выбор перед повторением цикла.Если вы сейчас введете правильное значение, цикл завершится.Вы также можете заметить, что ваше сообщение не соответствует тому, что вы хотите, чтобы пользователь предоставил.
Ваш код при правильном отступе выглядит примерно так:
int menus (int selection)
{
while (selection > 2 || selection < 1)
{
if (selection == 1)
{
cout << " 1 " << endl;
}
else if (selection == 2)
{
cout << " 2 " << endl;
}
else
cout << "You didn't choose 1 or 2. Choose again: ";
cin >> selection;
}
return 0;
}
Если вы действительноесли пользователь выберет 1 или 2 и вернет свой выбор, вам нужно что-то более похожее на:
int menus (int selection)
{
while (selection > 2 || selection < 1)
{
cout << "You didn't choose 1 or 2. Choose again: ";
cin >> selection;
}
if (selection == 1)
cout << " 1 " << endl;
else if (selection == 2)
cout << " 2 " << endl;
return selection;
}
По-прежнему существуют проблемы типа «что происходит в EOF?»с этим надо иметь дело.И печать может быть упрощена, конечно:
int menus (int selection)
{
while (selection > 2 || selection < 1)
{
cout << "You didn't choose 1 or 2. Choose again: ";
cin >> selection;
}
cout << " " << selection << " " << endl;
return selection;
}