C:矩阵元素的布尔检验

C:矩阵元素的布尔检验,c,matrix,boolean,C,Matrix,Boolean,为了更好地理解多维数组,我正在编写一个tic-tac-toe程序,这意味着一个3x3数组,所有元素都初始化为-1 当一行/列/对角线的所有元素都相等(并且不是空的,因此不同于-1)时,我试图使“win”条件变为真 但我一直在赢。。。当我不应该的时候,比赛应该结束的时候继续。我怎样才能修好它 这是我的代码(部分): #定义网格大小3 #定义空-1 #定义播放器0 #定义播放器1 printf(“玩家%d回合:插入平铺坐标,\n”,玩家); scanf(“%d%d”,&x,&y); /*更新磁贴*/

为了更好地理解多维数组,我正在编写一个tic-tac-toe程序,这意味着一个3x3数组,所有元素都初始化为-1

当一行/列/对角线的所有元素都相等(并且不是空的,因此不同于-1)时,我试图使“win”条件变为真

但我一直在赢。。。当我不应该的时候,比赛应该结束的时候继续。我怎样才能修好它

这是我的代码(部分):

#定义网格大小3
#定义空-1
#定义播放器0
#定义播放器1
printf(“玩家%d回合:插入平铺坐标,\n”,玩家);
scanf(“%d%d”,&x,&y);
/*更新磁贴*/
如果(玩家==玩家0)
栅格[x][y]=PLAYER0;
其他的
网格[x][y]=播放器1;
/*赢得对角线*/
i=0;
d1=((网格[i][i]==网格[i+1][i+1]==网格[i+2][i+2])&&(网格[i][i]!=空);
d2=((网格[i][grid_SIZE-i-1]==网格[i+1][grid_SIZE-i]==网格[i+2][grid_SIZE-i+1])&&(网格[i][grid_SIZE-i-1]!=空);
如果((d1)|(d2)){
printf(“玩家%d获胜!\n”,玩家);
胜利或平局=1;
}
/*中奖行还是中奖列*/
对于(j=0;j
比较运算符在C中是不可传递的,您应该使用布尔“and”运算符
&&
来组合不同的测试


此外,在这里发布代码时,请将其简化为一个简单的示例。您的问题与这样一个事实无关,即这是对矩阵的元素进行的。

您不能像这样进行比较

(grid[i][i] == grid[i+1][i+1] == grid[i+2][i+2])

(grid[i][i] == grid[i+1][i+1] && grid[i][i] == grid[i+2][i+2])
将d1和d2更改为

d1 = ((grid[i][i] == grid[i+1][i+1] && grid[i][i] == grid[i+2][i+2]) && (grid[i][i] != EMPTY));
d2 = ((grid[i][GRID_SIZE-i-1] == grid[i+1][GRID_SIZE-i] && grid[i][GRID_SIZE-i-1] == grid[i+2][GRID_SIZE-i+1]) && (grid[i][GRID_SIZE-i-1] != EMPTY));

循环中更改同样的内容。

谢谢!一开始我有这种怀疑,但我被没有抗议的编译器愚弄了。。。无论如何,我应该检查一下。
d1 = ((grid[i][i] == grid[i+1][i+1] && grid[i][i] == grid[i+2][i+2]) && (grid[i][i] != EMPTY));
d2 = ((grid[i][GRID_SIZE-i-1] == grid[i+1][GRID_SIZE-i] && grid[i][GRID_SIZE-i-1] == grid[i+2][GRID_SIZE-i+1]) && (grid[i][GRID_SIZE-i-1] != EMPTY));