对角检查2d阵列?

时间:2017-05-23 10:04:34

标签: c arrays

我尝试对角搜索3x3 2d数组,如下所示:enter image description here

我想检查对角线上的所有方框是否具有相同的值。以下是我尝试这样做的方法:

thisOne = board[0][2];    //set to 'X'
    for(i = 0; i<3; i++) {
        for(j = 3; j>0; j--){
            if(board[i][j-1] != thisOne) {
                thisOne= '\0';
            }
        }
    }
//since all boxes were 'X', thisOne is still set to 'X'
if(thisOne != '\0') {
    winner = thisOne;
    printf("vinnare på nördöst\n");
}

因此,运行此代码后,winner应该是&#39; X&#39;,如果所有框都是X&#39; s。但是代码不这样做,为什么呢?

6 个答案:

答案 0 :(得分:1)

当检索到第一个不匹配的char时,您没有打破/退出检查循环。

此外你的嵌套是不是你猜的:内部的一个循环进入每一行的所有列,但你只想对角线值......

您可以轻松地使用简单的while

int i=0;
int j=2;
while ((i<3) && (j>=0) && (board[i][j] == thisOne))
{
   i++;
   j--;
}

// if i<3 the diagonal is not full of thisOne char
if ( i < 3)
{
}

答案 1 :(得分:1)

您只需要检查对角线单元格而不是检查所有单元格。

答案 2 :(得分:1)

正如@BLUEPIXY所说,问题是i循环嵌套在i循环中。因此,对于j循环中的每次迭代,i循环在每列上运行3次,而不是仅仅处理次要对角线。有几种方法可以解决这个问题,尽管最佳方法是只使用一个循环而只使用一个变量for(i=0;i<3;i++) { if(board[i][2-i]!=thisOne) { thisOne='\0' break; } }

ranges$x

答案 3 :(得分:0)

为了实现你的目标,你只需要递减X迭代器和放大器。通过你的数组时的Y迭代器。

这是一个简单的例子:

#include <stdio.h>
#include <stdlib.h>

int     main(void)
{
  int   arr[3][3];
  int   it_y;
  int   it_x;

  it_y = 0;
  it_x = 2;
  arr[0][0] = 0;
  arr[0][1] = 1;
  arr[0][2] = 2;
  arr[1][0] = 3;
  arr[1][1] = 4;
  arr[1][2] = 5;
  arr[2][0] = 6;
  arr[2][1] = 7;
  arr[2][2] = 8;
  while (it_x < 3 && it_x >= 0)
    {
      printf("[%d][%d]: '%d'\n", it_y, it_x, arr[it_y][it_x]);
      --it_x;
      ++it_y;
    }
  return EXIT_SUCCESS;
}

答案 4 :(得分:0)

你可以这样做

for(int row=0,col=2; row<3; row++,col--)
{
    if(board[row][col] != thisOne) 
    {
            thisOne= '\0';
    }
}

答案 5 :(得分:0)

你只能检查这样的对角线元素

for(i = 0, j = 3-1; i < 3; i++, j--) { 
    if(board[i][j] != thisOne) { 
       thisOne = '\0'; 
    } 
 }