Что не так с этими циклами for, которые заставляют мою программу останавливаться? - PullRequest
0 голосов
/ 07 июня 2019

Эти функции, содержащие цикл for, должны проверять, есть ли в вертикальном движении в шахматной игре отрезок между начальными координатами и конечными координатами.Предполагается проверять столбцы (только вертикальные).

Они запускаются в другой функции, которая проверяет, является ли попытка перемещения действительной.

Однако, когда я запускаю свою программу с этим кодом, если на самом деле эти функции выполняются, код останавливается.Я не уверен, что все процессы останавливаются, но он не печатает ничего, что должен печатать.

Я почти уверен, что проблема в этом коде, потому что без него моя программа работает правильно.

Я пытался изменить идентификаторы в циклах for, но это не сработало.Я считаю, что проблема связана с добавлением 1 к «fromr».Без этого код работает просто отлично.Но мне нужна функция для проверки по фрагменту ниже fromr, а не от самого себя.

int checkVerticalPathwayWhite(int fromr, int fromc, int tor){
    fromr = fromr + 1;
    for(int r = fromr; r < fromr; r++){
        for(int c = fromc; c == fromc;){
            if (board[r][c] != &empty){
                printf("Pathway is not clear\n");
                return 0;
            }
        }
    }
    printf("Pathway is clear");
    return 1;
}

int checkVerticalPathwayBlack(int fromr, int fromc, int tor){
    fromr = fromr - 1;
    for(int r = fromr; r > tor; r = r-1){
        for(int c = fromc; c == fromc;{
            if (board[r][c] != &empty){
                printf("Pathway is not clear\n");
                return 0;
            }
    }
}
    printf("Pathway is clear");
    return 1;
}

Я ожидаю, что функция вернет 0, если в пути есть непустая часть между (fromr + 1) до (tor-1) и 1, если ее нет.

Ответы [ 2 ]

1 голос
/ 07 июня 2019

Ваши условия для петли неверны.

  1. r инициализируется как fromr.Условие r<fromr всегда будет ложным.

  2. c инициализируется на fromc.Условие c==fromc будет выполнено, но у вас нет приращения в цикле.Так что цикл будет работать бесконечно.

0 голосов
/ 07 июня 2019
for(int c = fromc; c == fromc;)

Это бесконечный цикл. Я думаю, вы хотели бы как-то изменить c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...