二维数组和枚举

时间:2016-10-31 16:57:05

标签: c multidimensional-array enums

这是Tic Tac Toe的评估功能。第14行附近有一个错误:'其他'没有先前的'如果'但我无法找出错误是什么。我该怎么改变代码?

#include <stdio.h>
#include <stdlib.h>

enum ttt {X, O, UNMARKED};
enum ttt board[3][3];
enum evalboard{XWon, OWon, NoOneWon, NotOverYet};

void evaluation(void){
    int i;

    /*Check the rows*/
    for(i = 0; i < 3; i = i + 1){
        if( (board[i][0] == X) && (board[i][1] == X) && (board[i][2] == X) )
            evalboard = XWon; break;

        else if(board[i][0] == O && board[i][1] == O && board[i][0] == O )
            evalboard = OWon; break;

        else if(board[i][0] == UNMARKED || board[i][1] == UNMARKED || board[i][2] == UNMARKED )
            evalboard = NotOverYet; break;

        else if(board[i][0] != UNMARKED || board[i][1] != UNMARKED || board[i][2] != UNMARKED )
            evalboard = NoOneWon; break;
    }

    /*Check the columns*/
    for(i = 0; i < 3; i = i + 1){
        if( board[0][i] == X && board[1][i] == X && board[0][i] == X )
            evalboard XWon; break;

        else if( board[0][i] == O && board[1][i] == O && board[0][i] == O) )
            evalboard OWon; break;

        else if(board[0][i] == UNMARKED || board[1][i] == UNMARKED || board[2][i] == UNMARKED )
            evalboard = NotOverYet; break;

        else if(board[i][0] != UNMARKED || board[i][1] != UNMARKED || board[i][2] != UNMARKED )
            evalboard = NoOneWon; break;
    }

    /*Check the diagonals*/

    else if( board[0][0] == X && board[1][1] == X && board[0][0] == X )
        evalboard XWon;

    else if( board[0][2] == O && board[1][1] == O && board[0][2] == O )
        evalboard OWon;
}

1 个答案:

答案 0 :(得分:1)

您需要添加大括号。

#include <stdio.h>
#include <stdlib.h>

enum ttt {X, O, UNMARKED};
enum ttt board[3][3];
enum evalboard{XWon, OWon, NoOneWon, NotOverYet};

void evaluation(void){
    int i;

    /*Check the rows*/
    for(i = 0; i < 3; i = i + 1){
        if( (board[i][0] == X) && (board[i][1] == X) && (board[i][2] == X) )
        {
            evalboard = XWon;
            break;
        }
        else if(board[i][0] == O && board[i][1] == O && board[i][0] == O )
        {
            evalboard = OWon;
            break;
        }
        else if(board[i][0] == UNMARKED || board[i][1] == UNMARKED || board[i][2] == UNMARKED )
        {
            evalboard = NotOverYet;
            break;
        }
        else if(board[i][0] != UNMARKED || board[i][1] != UNMARKED || board[i][2] != UNMARKED )
        {
            evalboard = NoOneWon;
            break;
        }
    }

    /*Check the columns*/
    for(i = 0; i < 3; i = i + 1){
        if( board[0][i] == X && board[1][i] == X && board[0][i] == X )
        {
            evalboard XWon;
            break;
        }
        else if( board[0][i] == O && board[1][i] == O && board[0][i] == O) )
        {
            evalboard OWon;
            break;
        }
        else if(board[0][i] == UNMARKED || board[1][i] == UNMARKED || board[2][i] == UNMARKED )
        {
            evalboard = NotOverYet;
            break;
        }
        else if(board[i][0] != UNMARKED || board[i][1] != UNMARKED || board[i][2] != UNMARKED )
        {
            evalboard = NoOneWon;
            break;
        }
    }

    /*Check the diagonals*/

    else if( board[0][0] == X && board[1][1] == X && board[0][0] == X )
        evalboard XWon;

    else if( board[0][2] == O && board[1][1] == O && board[0][2] == O )
        evalboard OWon;
}

那是因为你的条件块中有超过1条指令。它不像开关;)