为什么赢得循环终止?

时间:2018-04-21 17:42:11

标签: c infinite-loop post-increment

我的功能:

int checkSE(disk board[][SIZE], disk hypotheticalDisk)
{
    int i;
    int j;
    int row;
    int col;
    int player;
    int opponent;
    int checkSEflag;

    player = hypotheticalDisk.type;
    (player == 0) ? (opponent = 1) : (opponent = 0);

    row = hypotheticalDisk.pos.row;
    col = hypotheticalDisk.pos.col;

    checkSEflag = 0;

    for (i = row + 2, j = col + 2; ((i < SIZE) && (j < SIZE) && (checkSEflag == 0)); i++, j++)
    {
        if (board[i][j].type == player)
        {
            for (--i, --j; board[i][j].type == opponent; i--, j--)
            {
                if (i == row && j == col)
                {
                    checkSEflag = 1;
                    break;
                }
            }
        }
        printf("\n%d and %d and %d", i, j, checkSEflag);

    }
    return checkSEflag;
}

我的输出:

  

2和3和0

     

2和3和0

     

2和3和0

     

2和3和0

     

2和3和0

。 。

它继续......

我希望i和j都增加,直到它们等于SIZE(SIZE预定义为8)或者直到checkSEflag被指定为等于1。

看起来i和j的值不会被改变...... 我尝试将它们从循环条件中取出而放置它们 在循环体中,虽然没有改变任何东西。

我怀疑后增量运算符只是决定不工作所以我一定做错了什么,有什么想法可能是什么?

1 个答案:

答案 0 :(得分:2)

这两行:

for(i = row+2, j = col+2; ((i < SIZE) && (j <SIZE) && (checkSEflag == 0)); i++, j++)
    ...
    for(--i, --j; board[i][j].type == opponent; i--, j--)

所以,你们都在递增和递减(i,j);尝试在这些周围喷洒printfs,看看你是否在每次迭代时递增和递减i,j ...