C ++ while循环,测试多个数组'标

时间:2014-08-03 03:16:44

标签: c++ arrays while-loop

如何在while循环中测试多个数组以查看它们的下标值是否不等于某个值?

当数组中的所有下标都等于0时,我还需要将数组分开以结束循环。这是我认为可行的,但事实并非如此。

while(
      (pl_health[0] !=0 && pl_health[1] !=0 && pl_health[2] !=0 &&
       pl_health[3] !=0 && pl_health[4] !=0 && pl_health[5] !=0) ||
      (enemy[0].health !=0 && enemy[1].health !=0 && enemy[2].health !=0 &&
       enemy[3].health !=0 && enemy[4].health !=0 && enemy[5].health !=0)
     )

如您所见,我尝试使用paranthesese和or运算符分隔2个数组。程序运行没有错误,但循环甚至没有迭代一次。即使某些下标不等于0。

1 个答案:

答案 0 :(得分:0)

问题是你应该切换条件,最有可能(取决于你想要做什么)。其中一位评论者指出,只有在每个玩家都有健康或每个敌人都有健康的情况下,你的逻辑才会进行。"我完整地留下了答案的另一部分,因为它仍然是相关的。这是我认为表达你想要的条件的while循环。

while(
      (pl_health[0] !=0 || pl_health[1] !=0 || pl_health[2] !=0 ||
       pl_health[3] !=0 || pl_health[4] !=0 || pl_health[5] !=0) &&
      (enemy[0].health !=0 || enemy[1].health !=0 || enemy[2].health !=0 ||
       enemy[3].health !=0 || enemy[4].health !=0 || enemy[5].health !=0)
     )

在这种条件下进行如此多检查的while循环不是这里的方法。更好的方法可能是:

bool playerAlive = true, enemyAlive = true;

while (playerAlive && enemyAlive) {
    // game logic etc

    playerAlive = false;
    enemyAlive = false;

    for (int i=0; i<6; i++) {
        if (pl_health[i] != 0) {
            playerAlive = true;
        }

        if (enemy[i].health != 0) {
            enemyAlive = true;
        }
    }
}

请注意,存储健康的数组方法可能只适用于简单/小型游戏。当然,你可能想要删除魔法&#34; 6&#34;来自for循环并使它成为常数。