简体   繁体   English

C枚举数组(需要帮助理解)

[英]C enum array (need help understanding)

enum cell_contents {
    INVALID, HOLE, PEG
};

static const enum cell_contents master_board[BOARD_HEIGHT][BOARD_WIDTH] = {
    { INVALID, INVALID, PEG, PEG, PEG, INVALID, INVALID },
    { INVALID, INVALID, PEG, PEG, PEG, INVALID, INVALID },
    { PEG, PEG, PEG, PEG, PEG, PEG, PEG },
    { PEG, PEG, PEG, HOLE, PEG, PEG, PEG },
    { PEG, PEG, PEG, PEG, PEG, PEG, PEG },
    { INVALID, INVALID, PEG, PEG, PEG, INVALID, INVALID },
    { INVALID, INVALID, PEG, PEG, PEG, INVALID, INVALID }
};

I need assistance on how to loop through the master_board table and determine whether the field is INVALID, PEG or HOLE. 我需要有关如何遍历master_board表并确定该字段是INVALID,PEG还是HOLE的帮助。

I tried using this method, which didn't work: 我尝试使用此方法,但该方法无效:

char *characters[] = {"\t", 'o', '.'};

/* display the game board to the screen */
void display_board(enum cell_contents board[][BOARD_HEIGHT])
{
    /* delete this comment and write your own comments and code here */
    for(int i = 0; i < BOARD_HEIGHT; i++) {
        printf("%d.", i+1);

        int length = sizeof(board[i]) / sizeof(board[i][0]);
        printf("Length: %d", length);

        for(int e = 0; e < length; e++){
            if(board[i][e] == INVALID)
                printf("\t%c", characters[0]);
            else if(board[i][e] == PEG)
                printf("\t%c", characters[1]);
            else if(board[i][e] == HOLE)
                printf("\t%c", characters[2]);
        }

        printf("\n");
    }
}

I am using another function to call display_board: 我正在使用另一个函数来调用display_board:

void play_game(void)
{
    enum cell_contents board[BOARD_WIDTH][BOARD_HEIGHT];
    init_board(board);
    /* delete this comment and write your own comments and code here */

    //while(!is_game_over(board)) {
        display_board(board);
    //}
}

BOARD_WIDTH & BOARD_HEIGHT are the same at 7. BOARD_WIDTH和BOARD_HEIGHT在7点相同。

Did you define BOARD_WIDTH and BOARD_HEIGHT ? 您是否定义了BOARD_WIDTH和BOARD_HEIGHT? This code works for me: 该代码对我有用:

#define BOARD_HEIGHT 7
#define BOARD_WIDTH 7
enum cell_contents {
  INVALID, HOLE, PEG
};

static const enum cell_contents master_board[BOARD_HEIGHT][BOARD_WIDTH] = {
  { INVALID, INVALID, PEG, PEG, PEG, INVALID, INVALID },
  { INVALID, INVALID, PEG, PEG, PEG, INVALID, INVALID },
  { PEG, PEG, PEG, PEG, PEG, PEG, PEG },
  { PEG, PEG, PEG, HOLE, PEG, PEG, PEG },
  { PEG, PEG, PEG, PEG, PEG, PEG, PEG },
  { INVALID, INVALID, PEG, PEG, PEG, INVALID, INVALID },
  { INVALID, INVALID, PEG, PEG, PEG, INVALID, INVALID }
};

char *characters[] = {"\t", 'o', '.'};


void display_board(enum cell_contents board[][BOARD_HEIGHT])
{
    /* delete this comment and write your own comments and code here */
   for(int i = 0; i < BOARD_HEIGHT; i++) {
      printf("%d.", i+1);

      int length = sizeof(board[i]) / sizeof(board[i][0]);
      printf("Length: %d", length);

      for(int e = 0; e < length; e++){
          if(board[i][e] == INVALID)
              printf("\t%c", characters[0]);
          else if(board[i][e] == PEG)
              printf("\t%c", characters[1]);
          else if(board[i][e] == HOLE)
              printf("\t%c", characters[2]);
      }

       printf("\n");
  }
}

int main(int argc, char const *argv[])
{
 display_board(master_board);
 return 0;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM