【问题标题】:Why won't for loop terminate?为什么 for 循环不会终止?
【发布时间】:2018-10-02 04:00:34
【问题描述】:

我的功能:

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 的值并没有改变...... 我尝试将它们从循环条件中取出,而是将它们放置 在循环体中,虽然这并没有改变任何东西。

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

【问题讨论】:

  • (player==0)?(opponent=1):(opponent=0); - WTF - 使用 if 语句使其可读
  • LOL 每个人似乎都讨厌 ?: 运算符
  • 我不讨厌? 运算符。它有它的位置
  • opponent = (player==0) 做同样的事情并且是可读的。
  • @Jean-FrançoisFabre - 我同意你的观点,我博学的朋友

标签: c infinite-loop post-increment


【解决方案1】:

这两行:

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...

【讨论】:

  • 不幸的是它甚至没有进入第二个if语句,所以最外面的for循环一直在迭代,甚至没有进入if语句体:///
  • 你确定吗?我只是运行它,使用一个全零的板和一个假设.type == 0,它立即挂起,因为它进入了 if,它支持 i,j。它从未执行过内部 for 循环,但该 for 循环的初始化语句确实执行了。如果你确定,你能张贴你的“板”吗?我不太喜欢 2^71 组合...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-12
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
  • 1970-01-01
相关资源
最近更新 更多