2014-12-08 6 views
1

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

Я хочу принимать только целые входы со значениями 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

Ваше '(programversion! = (1 || 2 || 3))' условие неверно, но вы должны были обнаружить, что отлаживая ваш код. – xxbbcc

ответ

1

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

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

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

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

Спасибо xxbbcc! Я понимаю, как исправить мой код сейчас. – Idios

+0

@Idios Я рад, что это решило вашу проблему. Если вы не возражаете, пожалуйста, поддержите и примите мой ответ, если найдете его полезным. – xxbbcc

+0

У меня нет 15 репутации, поэтому я не могу повышать, однако я принял ваш ответ. – Idios

Смежные вопросы