while循环中的OR运算符不会退出

时间:2013-11-10 06:34:41

标签: c while-loop

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并没有给循环留下任何想法?

3 个答案:

答案 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为负数之前,循环不会终止;如果其中一个或两个值都为正,则循环将继续。

如果您希望循环在任一值为负时终止,则需要在条件中使用'和'&&