我的Tic-Tac-Toe游戏中的错误

时间:2012-01-22 03:24:45

标签: c

这是我的tic-tac-toe游戏的代码:

#include <stdio.h>
#include <stdbool.h>
#include <string.h>

int board[3][3] = {
                        {0, 0, 0},
                        {0, 0, 0},
                        {0, 0, 0}
                  };

int main (void)
{
    int const user1 = 1;
    int const user2 = 2;
    char move[10];

    while (! all_locations_filled()) {
        printf("User-1, please enter your move:");
        scanf("%s", move);

        if(valid_location(move)) {
            mark_location(user1, move);
            display_board(board[3][3]);
        }
        else if(won_the_game(user1)) {
            printf("Congratulations User-1, You Won the Game!");
            break;
        }
        else {
            printf("Invalid Move");
        }

        printf("User-2, please enter your move:");
        scanf("%s", move);

        if(valid_location(move)) {
            mark_location(user2, move);
            display_board();
        }
        else if(won_the_game(user2) {
            printf("Congratulations User-2, You Won the Game!");
            break;
        }
        else {
            printf("Invalid Move");
        }
    }

    return 0;
}

bool valid_location(char str[10]) {
    int strcmp(x, y);

    if (strcmp(str[10], "upperLeft") == 0 || strcmp(str[10], "up") == 0 || strcmp(str[10], "upperRight") == 0 || strcmp(str[10], "left") == 0 || strcmp(str[10], "center") == 0 || strcmp(str[10], "right") == 0 || strcmp(str[10], "lowerLeft") == 0 || strcmp(str[10], "down") == 0 || strcmp(str[10], "lowerRight") == 0)
        return true;
}

void mark_location(int userU, char str[10]) {
    int strcmp(x, y);

    if (strcmp(str[10], "upperLeft") == 0)
        board[0][0] = userU;
    else if (strcmp(str[10], "up") == 0)
        board[0][1] = userU;
    else if (strcmp(str[10], "upperRight") == 0)
        board[0][2] = userU;
    else if (strcmp(str[10], "left") == 0)
        board[1][0] = userU;
    else if (strcmp(str[10], "center") == 0)
        board[1][1] = userU;
    else if (strcmp(str[10], "right") == 0)
        board[1][2] = userU;
    else if (strcmp(str[10], "lowerLeft") == 0)
        board[2][0] = userU;
    else if (strcmp(str[10], "down") == 0)
        board[2][1] = userU;
    else if (strcmp(str[10], "lowerRight") == 0)
        board [2][2] = userU;
}

char display_board(int array[][]) {
    int i, j;

    for (i=0; i<3; ++i)
        for (j=0; j<3; ++j)
            if (array[i][j] == 0)
                print("-");
            else if (array[i][j] == 1)
                print("x");
            else if (array[i][j] == 2)
                print("o");
}

bool all_locations_filled() {
    int i, j;

    for (i=0; i<3; ++i)
        for (j=0; j<3; ++j)
            if board[i][j] == 0
                return false;
    return true;
}

bool won_the_game(userU) {
    int i, j;

    if (board[0][0] == userU && board[0][1] == userU && board[0][2] == userU)
        return true;
    else if (board[1][0] == userU && board[1][1] == userU && board[1][2] == userU)
        return true;
    else if (board[2][0] == userU && board[2][1] == userU && board[2][2] == userU)
        return true;
    else if (board[0][0] == userU && board[1][0] == userU && board[2][0] == userU)
        return true;
    else if (board[0][1] == userU && board[1][1] == userU && board[2][1] == userU)
        return true;
    else if (board[0][2] == userU && board[1][2] == userU && board[2][2] == userU)
        return true;
    else if (board[0][0] == userU && board[1][1] == userU && board[2][2] == userU)
        return true;
    else if (board[2][2] == userU && board[1][1] == userU && board[2][0] == userU)
        return true;
    else
        return false;
}

有一些我不理解的错误,它们是:

tictactoe.c:50: error: expected expression before ‘}’ token

这个错误发生在主要功能的最后但是我不确定我做错了什么。

tictactoe.c:52: error: nested functions are disabled, use -fnested-functions to re-enable

我不知道我使用了嵌套函数。

tictactoe.c:53: warning: parameter names (without types) in function declaration

这是指int strcmp(x,y)

tictactoe.c:55: warning: passing argument 1 of ‘strcmp’ makes pointer from integer without a cast

strcmp我做错了什么?

如果有人能帮助我,我会非常感激。

2 个答案:

答案 0 :(得分:3)

你在这里错过了一个右括号(第40行):

else if(won_the_game(user2) {

应该是:

else if(won_the_game(user2)) {

答案 1 :(得分:2)

strcmp也有一些问题。

strcmp(str[10], "upperRight")

编译器抱怨第一个参数str[10]。一个问题是,它从字符串中选择单个字符,而不是整个字符串。另一个问题是,在大小为10的数组中,位置编号为0..9,因此甚至没有位置10!

此外,像"upperRight"这样的字符串文字包含10个可见字符加上一个额外的零字符作为终结符。因此,当存储在str时,它需要11个位置。