Базовый ввод £ Неопределенный цикл

Это очень простая программа, которую я хочу запустить. Пользователю предлагается выбрать один из трех вариантов программ, которые позже будут отображаться отдельно в коде.

Я хочу принимать только целочисленные входные данные, например, со значениями 1,2,3,4 и 5. По какой-то причине текущая программа принимает только вход 1, а цикл while повторяется бесконечно для нецелочисленного ввода.

Может кто-нибудь заметить эти две проблемы и предложить некоторые исправления для меня? Заранее спасибо.

Код:

#include <iostream>

using namespace std;

int main() {
int programversion;
cout << "Which program version would you like to run? Basic [1], advanced [2], or advanced-variant [3]?\n";
cin >> programversion;

while (programversion != (1||2||3))
{
cout << "That is not a correct input integer - please choose [1], [2] or [3]\n";
cin >> programversion;
}

if (programversion == 1)
{
cout << "You chose option 1.\n";
}

if (programversion == 2)
{
cout << "You chose option 2.\n";
}

if (programversion == 3)
{
cout << "You chose option 3.\n";
}

return 0;
}

1

Решение

Ваше состояние должно быть

while ( programversion < 1 || programversion > 3 )
{
...
}

Причина ваша while цикл продолжает работать, потому что ваше текущее условие просто всегда оценивается как true, и цикл никогда не прерывается (кроме случаев, когда вы набираете 1). 1||2||3 просто оценивает 1 это единственное условие, которое ваш код правильно обрабатывает. Если вы хотите протестировать независимые условия, вам нужно написать код для индивидуального тестирования этих условий. Либо используйте мой фрагмент кода выше (который проверяет, если programversion находится в диапазоне 1 и 3) или использовать несколько проверок в пределах while выражение для проверки каждого приемлемого значения независимо. Например:

while ( programversion != 1 && programversion != 2 && ... )
{
...
}
1

Другие решения


По вопросам рекламы [email protected]