从函数返回指针结构

时间:2014-10-17 14:46:54

标签: c

我正在尝试将用户输入的行和列返回到“切换”(它应该是一个名为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;
}

3 个答案:

答案 0 :(得分:4)

你犯了一个简单的错误。该函数的文档说:

Output:      Return 0 if the user want to end the game, 1 otherwise.

但是,相反,您将返回0nextMove的值。

nextMovemove*,而不是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;
}