if .. else .. операторы, не выдающие ожидаемых результатов. В то время как проблема с петлей

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

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";
}
}

1

Решение

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

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

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

(choiceOne_One != 1 || 2)

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

  • если (choiceOne_One! = 1)

ИЛИ ЖЕ

  • если (2).

Последнее утверждение всегда верно, потому что в C ++, если у вас есть оператор if, за которым следует целое число, он просто вернет логическое «истина».

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

Надеюсь, это поможет 🙂

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 может / должен быть изменен или исключен — либо используйте логический флаг, либо перерыв / возврат.
1

Вы должны заполнить заявление if:

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

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

0

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

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

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

0

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

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
По вопросам рекламы [email protected]