gpt4 book ai didi

c - 我在函数内的第一个返回值没有返回任何东西

转载 作者:太空宇宙 更新时间:2023-11-04 08:23:30 26 4
gpt4 key购买 nike

所以我有一个控制玩家轮流的函数,我希望它在玩家轮流失败时返回 FAILURE。 (游戏是连接4)。我显然希望它在转弯有效时返回成功,但是......即使我返回 SUCCESS,它也需要两次返回 SUCCESS 才能返回一次成功。这是代码:

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(&current, &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。有谁知道为什么会发生这种情况?我的输出是打印:

人类人类

计算机计算机

人类人类

计算机计算机

依此类推...显示它在注册成功之前经历了两次。

最佳答案

你的问题在这里:

while(counter < 30)
{
take_turn(current, board);

/* Only swap if take turn was success */
if(take_turn(current, board) == SUCCESS)

您正在调用 take_turn() 两次。

关于c - 我在函数内的第一个返回值没有返回任何东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32275379/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com