Я неправильно запрограммировал цикл

0
 printf("What do you do?\n1. Walk Away.\n2. Jump.\n3. Open Door.\n\n");
 scanf("%d",&Choice);
 printf("\n\n\n");
 while(4<=Choice,Choice<=0);
 {
     printf("That is not a choice.\n");
     printf("What do you do?\n1. Walk Away.\n2. Jump.\n3. Open Door.\n\n");
     scanf("%d",&Choice);
     printf("\n\n\n");
 }

Так что это моя программа. Он работает, но то, что я хочу, это повторить до тех пор, пока не будет введен ответ 1, 2 или 3. Но независимо от того, что он ответит, он проходит цикл while, а затем продолжайте, независимо от следующего выбора. (Также я объявил "Выбор", я просто не хотел показывать всю программу.)

  • 5
    @jeffamaphone Два выражения являются взаимоисключающими; он ищет || что логично ИЛИ.
  • 0
    О да. Это также написано неловко.
Показать ещё 4 комментария
Теги:

3 ответа

6

В вашем коде есть две проблемы. Ваше выражение while-loop неверно. Запятая не делает то, что, по вашему мнению, делает: в C/C++ запятая выполняет левое выражение и оценивает правое выражение, что означает, что в вашем случае вы проверяете только второе условие. Вы, вероятно, хотите:

 while(4<=Choice || Choice<=0)

|| является оператором OR, который возвращает true, если любое из выражений вокруг него истинно.

Во-вторых, в конце цикла while есть неуместная точка с запятой:

while(4<=Choice,Choice<=0); //<-- this should not be here

Это означает конец цикла, что означает, что ваш код анализируется как:

while(4<=Choice,Choice<=0); //loop body is empty

{
    //and we have a random unnamed block following it
}

Удалите точку с запятой, и ваш цикл while должен выполняться правильно.

3

C и C++ имеют запятую, которая имеет наименьший приоритет для всех операторов. Он оценивает левый операнд и отбрасывает результат, а затем оценивает правый операнд. Таким образом, ваше while условие эквивалентно:

while (Choice <= 0)

У вас также есть ошибка, потому что сразу после условия есть точка с запятой, которая делает бесконечный цикл, если Choice не является строго положительным (поскольку ничто в цикле не изменяет значение Choice).

То, что вы, вероятно, намеревались написать, было:

while (Choice >= 4 || Choice <= 0)
{
    ...
}
2

Оператор запятой , не проверить оба условия, он просто возвращает второй из двух. Таким образом, ваша в while петля является эквивалентом:

while(Choice<=0) ;

и поскольку там a ; после утверждения это фактически бесконечный цикл, если условие выполнено. Хорошо, что вы не вошли в выбор -1.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню