2014-09-03 9 views
1

Обратите внимание, что choiceOne_One равно 0 перед вводом пользователя.
У меня возникли проблемы с моим текущим кодом. Я хотел бы, чтобы пользователь мог просто перепечатать свой ввод до тех пор, пока он не будет действительным, вместо того, чтобы закрыть программу и повторно открыть ее. Из-за этого (и, по совету других в interwebs), я добавил цикл while, который кажется солидным. По какой-то причине, когда пользователь вводит 1, он прокручивает первый оператор if, как если бы вход был недействителен, выводя «Woah! Это был не вариант .. и т. Д.». Я не уверен, как сделать эту работу, или даже что с ней не так. Любая помощь приветствуется.if .. else .. инструкции не выводят ожидаемые результаты. В то время как проблема с циклом?

cin >> choiceOne_One; 
    int whileInt=0; 

while(whileInt == 0) 
{ 

if (choiceOne_One != 1 || 2) 
    { 
     cout << "Woah! That wasn't an option! Try Again.\n"; 
    } 

else if (choiceOne_One == 1) 
    { 
     whileInt++; 
     cout << "One\n"; 
    } 


else if (choiceOne_One == 2) 
    { 
     whileInt++; 
     cout << "Two\n"; 
    } 
} 
+0

Хорошо, поэтому он всегда переходит в тело 'if'. Так что вытащите условие и поиграйте с ним. – chris

ответ

0

Вы должны завершить, если заявление:

if (choiceOne_One != 1 && choiceOne_One != 2) 
    { 
    cout << "Woah! That wasn't an option! Try Again.\n"; 
    } 

двойной || означает or и && означает and поэтому оба условия должны быть выполнены для того, чтобы напечатать

1

Я считаю, что это из-за ваш оператор if. Вы должны поменять его на

if (choiceOne_One != 1 && choiceOne_One != 2) 

Это потому, что оператор 'или' неправильно используется в вашем текущем коде. Имея

(choiceOne_One != 1 || 2) 

вы, по сути говоря,

  • если (choiceOne_One! = 1)

ИЛИ

  • если (2).

Последнее утверждение всегда верно, потому что в C++, если у вас есть инструкция if, за которой следует целое число, оно просто возвращает логическое значение "true".

Этот сайт здесь рассказывает вам больше о том, как это работает. http://www.cplusplus.com/forum/articles/3483/

Надежда, что помогает :)

+0

@ AlexD отредактировал, спасибо :) – jj172

0

Проблема является линия if(choiceOne_One != 1 || 2)

Вы должны расширить этот if(choiceOne_One != 1 && choiceOne_One != 2)

Причина заключается в том, что в C++, целые вычисляться true, если они отличны от нуля, , Таким образом, с вашим оригинальным заявлением, choiceOne_One != 1 || 2 становится choiceOne_One != 1 || true, и, конечно, что-нибудь OR'ed с true is true.

+0

Спасибо, я думаю, причина, по которой я это написал, потому что я до сих пор не знаком с C++, поскольку java - это мой первый язык. –

1

Проблема вызвана тем, что choiceOne_One != 1 || 2 разобран как (choiceOne_One != 1) || 2, который всегда принимается условным (поскольку 2 является «истинным» значением, не зависящим от выбора).

Способ [рекомендую] «исправить» этот код использует else и не менять условное, хотя такое также будет работать.Рассматривать;

if (choiceOne_One == 1) 
    { 
     whileInt++; 
     cout << "One\n"; 
    }  
else if (choiceOne_One == 2) 
    { 
     whileInt++; 
     cout << "Two\n"; 
    } 
else // only here if NONE of the above conditions are true 
    { 
     cout << "Woah! That wasn't an option! Try Again.\n"; 
    } 

Кроме того,

  1. Чтение значения входного внутри цикла. В настоящее время choiceOne_One никогда не будет меняться, пока показываемый цикл будет запущен - это приведет к завершению цикла, который заканчивается немедленно или никогда не заканчивается.
  2. whileInt может/должен быть изменен или исключен - либо используйте логический флаг, либо break/return.
0
cin >> choiceOne_One; 
while(true) 
{ 
if (choiceOne_One != 1 && choiceOne_One != 2) 
{ 
    cout << "Woah! That wasn't an option! Try Again.\n"; 
    cin >> choiceOne_One; 
}else if(choiceOne_One == 1){ 

    cout << "One\n"; 
    break; 

}else if (choiceOne_One == 2){ 
cout << "Two\n"; 
    break; 
} 
} 

К сожалению я не C++ компилятор, чтобы проверить этот код, но я думаю, что это будет работать с вами

+0

Это изменяет вывод кода. – user2864740

+0

Я только что отредактировал спасибо –

0

После редактирования первого , если() состояние, как некоторые из вас отметили, , Я понял, что у меня все еще проблема с программой, бесконечно зависающей в первом выражении. Я также понял, что это потому, что я не писал строку, дающую пользователю еще один шанс ввести что-то действительное (было хорошо понять это). Итак, я умело вырезал и вставил строку «cin >> choiceOne_One»; извне цикла while() в цикл while() и voila! Это сработало. В ретроспективе я должен был заметить это раньше.