Обратите внимание, что 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";
}
}
Я верю, что это из-за вашего заявления if. Вы должны изменить это на
if (choiceOne_One != 1 && choiceOne_One != 2)
Это связано с тем, что оператор ‘or’ неправильно используется в вашем текущем коде. Имея
(choiceOne_One != 1 || 2)
по сути, вы говорите,
ИЛИ ЖЕ
Последнее утверждение всегда верно, потому что в C ++, если у вас есть оператор if, за которым следует целое число, он просто вернет логическое «истина».
Этот сайт расскажет вам больше о том, как это работает. http://www.cplusplus.com/forum/articles/3483/
Надеюсь, это поможет 🙂
Проблема вызвана тем, что 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";
}
Также,
whileInt
может / должен быть изменен или исключен — либо используйте логический флаг, либо перерыв / возврат.Вы должны заполнить заявление if:
if (choiceOne_One != 1 && choiceOne_One != 2)
{
cout << "Woah! That wasn't an option! Try Again.\n";
}
двойной ||
средства or
а также &&
средства and
поэтому оба условия должны быть выполнены для печати
Проблема в линии if(choiceOne_One != 1 || 2)
Вы должны расширить это до if(choiceOne_One != 1 && choiceOne_One != 2)
Причина в том, что в C ++ целые числа оцениваются как true
если они ненулевые. Итак, с вашим оригинальным утверждением, choiceOne_One != 1 || 2
становится choiceOne_One != 1 || true
и, конечно, что-нибудь или с true
является true
,
После редактирования первого если() Как и некоторые из вас, я понял, что у меня все еще есть проблема с программой, бесконечно повторяющей первый оператор. Я также понял, что это потому, что я не написал строку, дающую пользователю еще один шанс ввести что-то правильное (было приятно осознавать это). Итак, я мастерски вырезал и вставил строку «cin >> choiceOne_One;» извне цикла while () в цикл while () и вуаля! это сработало. Оглядываясь назад, я должен был заметить это раньше.
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 ++ для тестирования этого кода, но я думаю, что это сработает с вами