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, а затем продолжайте, независимо от следующего выбора. (Также я объявил "Выбор", я просто не хотел показывать всю программу.)
В вашем коде есть две проблемы. Ваше выражение 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 должен выполняться правильно.
C и C++ имеют запятую, которая имеет наименьший приоритет для всех операторов. Он оценивает левый операнд и отбрасывает результат, а затем оценивает правый операнд. Таким образом, ваше while
условие эквивалентно:
while (Choice <= 0)
У вас также есть ошибка, потому что сразу после условия есть точка с запятой, которая делает бесконечный цикл, если Choice
не является строго положительным (поскольку ничто в цикле не изменяет значение Choice
).
То, что вы, вероятно, намеревались написать, было:
while (Choice >= 4 || Choice <= 0)
{
...
}
Оператор запятой ,
не проверить оба условия, он просто возвращает второй из двух. Таким образом, ваша в while
петля является эквивалентом:
while(Choice<=0) ;
и поскольку там a ;
после утверждения это фактически бесконечный цикл, если условие выполнено. Хорошо, что вы не вошли в выбор -1.
||
что логично ИЛИ.