do{
printf("Monster name:%s\n",monsternames[globalvar.monstercatego][globalvar.monsternivel]);
printf("Monster Life:%d\n",globalvar.monsterhp);
printf("------------------------------------------\n");
printf("----------------BattleGround--------------\n");
printf("------------------------------------------\n");
printf("Player name:%s\n", nomeheroi);
printf("Player life:%d\n", globalvar.playerhp);
printf("----------------------------------------\n");
printf("------------------Menu------------------\n");
printf("----------------------------------------\n");
printf("A - Attack\n");
printf("D - Defend\n");
scanf(" %c",&opcaobattle);
switch(opcaobattle)
{
case 'a':
danoPMonster();
break;
case 'd':
break;
}
}while((globalvar.monsterhp >= 0) || (globalvar.playerhp >= 0));
我的控制台显示:
Monster name:Rat
Monster Life:2
----------------------------------------
----------------BattleGround------------
----------------------------------------
Player name:Test
Player life:10
----------------------------------------
------------------Menu------------------
----------------------------------------
A - Attack
D - Defend
a
Monster name:Rat
Monster Life:-1
----------------------------------------
----------------BattleGround------------
----------------------------------------
Player name:Test
Player life:10
----------------------------------------
------------------Menu------------------
----------------------------------------
A - Attack
D - Defend
它清楚地表明globalvar.monsterhp < 0
并没有给循环留下任何想法?
答案 0 :(得分:5)
这是因为你正在使用||
逻辑OR运算符意味着任何一个条件都将为真,那么循环将继续。玩家的生命是>0
,所以它不会退出循环
答案 1 :(得分:1)
据推测,你只想在玩家的怪物和都活着时进行迭代。你的代码迭代,而至少有一个是活着的。从&#34;或&#34;更改条件到&#34;和。&#34;
while((globalvar.monsterhp >= 0) || (globalvar.playerhp >= 0));
// to
while((globalvar.monsterhp >= 0) && (globalvar.playerhp >= 0));
答案 2 :(得分:0)
'或'||
条件意味着在globalvar.monsterhp
为负且 globalvar.playerhp
为负数之前,循环不会终止;如果其中一个或两个值都为正,则循环将继续。
如果您希望循环在任一值为负时终止,则需要在条件中使用'和'&&
。