我的功能:
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的值不会被改变...... 我尝试将它们从循环条件中取出而放置它们 在循环体中,虽然没有改变任何东西。
我怀疑后增量运算符只是决定不工作所以我一定做错了什么,有什么想法可能是什么?
答案 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 ...