Я пишу простую текстовую игру на C, где игрок сражается с очень простым AI. Внутри функции main() есть цикл, который должен продолжаться до тех пор, пока HP или HP не может превышать 0. См. Пример ниже.C: While Loop With Logical OR
while(grunt->hp > 0 || player->hp > 0) {
stats(player);
printf("Grunt HP: %d\n", grunt->hp);
plyMove(player, grunt);
aiMove(player, grunt);
}
if(player->hp > 0) {
printf("You won the battle!\n"); }
else {
printf("You've lost the battle!\n"); }
return 0;
Теперь, насколько я понимаю, цикл while должен делать это до тех пор, пока оба выражения истинны. Если только один из них становится ложным, цикл должен заканчиваться. Однако, если вражеский HP ниже нуля, он не выйдет из строя. Но если HP игрока ниже нуля, он ломается.
Каждая итерация цикла печатает эти значения, поэтому я могу отслеживать их.
Я просто не понимаю логику этого? Если вам нужно увидеть какой-либо дополнительный код, пожалуйста, дайте мне знать.
«есть петля, которая должна продолжаться до тех пор, пока HP *** или *** вражеского HP выше 0». Итак, вы хотите продолжить цикл до тех пор, пока обе стороны не умрут? Это звучит не так. Вы уверены, что понимаете, что означает «или»? – user2357112
Вы противоречите себе. В первом абзаце вы подтверждаете, что цикл продолжается до тех пор, пока выполняется одно из условий.Во втором абзаце вы говорите, что ожидаете, что цикл остановится, как только одно из условий будет ложным. – Stijn
Я думаю, что ваш код верен, он соответствует вашему описанию в первом абзаце. Это второй абзац, который противоречит вашему первому. – nobism