Почему не будет замкнута петля?

Lucie спросил: 28 марта 2018 в 04:02 в: c

Моя функция:

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 (размер, предопределенный как 8), или пока не будет назначен checkSEflag равный 1.

Похоже, что значения i и j просто не меняются ... Я попытался вывести их из условий цикла и вместо этого разместил их в теге цикла, хотя это не так, я ничего не меняю.

Я сомневаюсь, что операторы post increment просто решили не работать, поэтому я должен делать что-то неправильно, любые идеи о том, что это может быть?

1 ответ

machine_1 mevets ответил: 28 марта 2018 в 04:59

Эти две строки:

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 на каждой итерации ...

Lucie ответил: 28 марта 2018 в 04:28
К сожалению, он даже не вводит второй оператор if, поэтому внешний цикл for продолжает повторяться, даже не вводя тело оператора if:///
mevets ответил: 28 марта 2018 в 04:49
Уверены ли вы? Я просто запустил его, используя доску со всеми нулями и гипотетический тип == 0, и он сразу же завис, потому что попал в тот if, который зарезервировал i, j. Он никогда не выполнял внутренний цикл for, но оператор инициализации цикла for выполнялся. Если вы уверены, можете ли вы опубликовать свою "доску"; Я не очень заинтересован в комбинациях 2 ^ 71 ...
Lucie ответил: 28 марта 2018 в 04:57
nvm, вы на 100% правы, а я слепой инструмент, большое спасибо !!!!!!