我正在尝试将用户输入的行和列返回到“切换”(它应该是一个名为Teaser的游戏),但我不确定如何返回我想要的值。
我得到的警告是:
warning: incompatible pointer to integer conversion returning 'move *' from a function with result type 'int' [-Wint-conversion]
typedef struct {
int row;
int column;
} move;
/* Function: getNextMove
* Description: Ask the user for a new move or if the user want to quit
* the game.
* Input: A pointer to a move structure. Coordinates for the next move
* or a signal from the user to end the game.
* Output: Return 0 if the user want to end the game, 1 otherwise.
* Return the coordinates for the next game through the
* structure pointed to.
*/
int getNextMove(move *nextMove) {
printf("Make a move (Row = 0 ends the game)\n");
printf("Row = ");
scanf("%d", &nextMove->row);
if (nextMove->row == 0)
{
return 0;
}
printf("Column = ");
scanf("%d", &nextMove->column);
return nextMove;
}
答案 0 :(得分:4)
你犯了一个简单的错误。该函数的文档说:
Output: Return 0 if the user want to end the game, 1 otherwise.
但是,相反,您将返回0
或nextMove
的值。
nextMove
是move*
,而不是int
,因此警告。这也是为什么警告如此有用的原因,因为他们已经指出了你在回复错误时所犯的错误。
将return nextMove
更改为return 1
。
答案 1 :(得分:2)
您不应该按功能横幅评论的建议返回多个值。返回0或1表示游戏状态,scanF()函数调用改变了nextMove指向的地址中存储的值:
int getNextMove(move *nextMove) {
printf("Make a move (Row = 0 ends the game)\n");
printf("Row = ");
scanf("%d", &nextMove->row);
if (nextMove->row == 0)
{
return 0;
}
printf("Column = ");
scanf("%d", &nextMove->column);
return 1;
}
对于记录,如果您确实想要返回指向移动结构的指针,则示例可以是:
move * getMove(void)
{
static move moveToReturn;
/* some operations on the move stucture */
return &moveToReturn
}
答案 2 :(得分:1)
你(有时)会回复这个论点。那是什么意思?在这种情况下,没有必要返回任何东西。
如果你确实想要返回一个指向move
的指针,那么你的函数应该将它声明为它的返回类型:
move * getNextMove(move * nextMove) {
...
return nextMove;
}