我正在尝试编写一个为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
(这意味着它尚未分配)。希望有人可以提供帮助:)
答案 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