Итак, у меня есть функция, которая контролирует поворот игрока, и я хочу, чтобы он возвращал FAILURE, когда игрок безуспешно совершает поворот. (Игра - это соединение 4). Я, очевидно, хочу, чтобы он возвращал успех, когда поворот действительно, однако ... Даже когда я возвращаю УСПЕХ, для этого требуется два возврата УСПЕХА, чтобы вернуть один успех. Вот код:Мое первое возвращаемое значение внутри функции ничего не возвращает
enum input_result take_turn(struct player * current,
enum cell_contents board[][BOARDWIDTH])
{
/***************** Logic for Human player ******************/
if(current->type == HUMAN)
{
printf("human");
return SUCCESS;
}
/**************** Logic for Computer player ****************/
else if(current->type == COMPUTER)
{
printf("computer");
return SUCCESS;
}
return SUCCESS;
}
И это называется этим:
struct player * play_game(struct player * human ,
struct player* computer)
{
while(counter < 30)
{
take_turn(current, board);
/* Only swap if take turn was success */
if(take_turn(current, board) == SUCCESS)
{
swap_players(¤t, &other);
display_board(board);
}
counter++;
}
return NULL;
}
Единственное, что я могу думать, что может быть губит это мое:
enum input_result
{
/**
* the input was valid
**/
SUCCESS,
/**
* the input was not valld
**/
FAILURE,
/**
* the user requested to return to the menu either by pressing enter on
* an empty line or pressing ctrl-d on an empty line
**/
RTM=-1
};
Я не уверен почему take_turn (current, board) вызывается дважды, когда единственный возможный результат заключается в том, чтобы оператор if был введен как любое возможное возвращаемое значение SUCCESS. Кто-нибудь знает, почему это может случиться? Мой выход печати:
HumanHuman
ComputerComputer
HumanHuman
ComputerComputer
и так далее ... показывая, что он собирается через него в два раза, прежде чем успех зарегистрирован.
Только для разъяснения: вам интересно, почему 'take_turn' все еще выполняется в if-условии, хотя он может только возвращать' SUCCESS', а код в if-clause ** должен быть выполнен? – Downvoter
Да, мне интересно, почему он не входит в оператор if и вызывает обмен игроков, когда возвращается только возвращаемое возвращаемое значение. SUCCESS – Rrr
Я проголосовал за закрытие этого вопроса как типографскую ошибку, которая не сможет быть (после того, как OP удалит дополнительный вызов 'take_turn()'. – mah