通过随机生成的索引进行分配

时间:2016-02-14 11:40:57

标签: c function

我正在尝试编写一个为M个玩家分配N个元素的函数。这是我写的:

void assignElements(Player *p, Tab *t, int n) {
    int i = 0, nRand, flagElements = 0;
    do {
        do {
            nRand = MINRANDT + rand() % (MAXRANDT - MINRANDT + 1);
        } while(t[nRand].type != Terrain && t[nRand].idProp != -1); 

        if (i == n) {
            i = 0;  //this makes "i" reset when it reaches the number of players
        }
        t[nRand].idProp = i;
        p[i].numTerrains++;
        i++;
        flagElements++;

    } while (flagElements != NELEMENTS);
}

所以,如果我尝试运行这个函数,它就不会尊重第二个while的条件(也许问题就是条件。):事实上,它也分配给t元素不属于Terrain类型(这是enum)。在nRand do / while下执行操作的条件是nRand必须是t元素Terrain的索引,并且它的idProp-1(这意味着它尚未分配)。希望有人可以提供帮助:)

1 个答案:

答案 0 :(得分:3)

t[nRand].type != Terrain | t[nRand].idProp != -1 | &&
-------------------------+-----------------------+---
          0              |          0            |  0
          0              |          1            |  0
          1              |          0            |  0
          1              |          1            |  1

意味着循环将退出3个条件,并且仅在满足两个子条件时重复

尝试||

t[nRand].type != Terrain | t[nRand].idProp != -1 | ||
-------------------------+-----------------------+---
          0              |          0            |  0
          0              |          1            |  1
          1              |          0            |  1
          1              |          1            |  1