【发布时间】:2023-03-09 09:17:02
【问题描述】:
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 }
};
我需要有关如何遍历 master_board 表并确定该字段是 INVALID、PEG 还是 HOLE 的帮助。
我试过用这个方法,没用:
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");
}
}
我正在使用另一个函数来调用 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 在 7 处相同。
【问题讨论】:
-
您的参数定义错误(您使用 BOARD_HEIGHT 作为绑定为“y”的第二个数组,但在定义中您将其用作您的 x),也请考虑
enum cell_contents **board,因为它会无论如何都会被编译器截断。而且,仅供参考:您可以只使用board[i][e]作为characters的索引,因为它无论如何都匹配它(board[i][e] 可以是INVALID/PEG/HOLE而那些是0/1/2所以... -
你想
void display_board(enum cell_contents board[][BOARD_WIDTH])吗? -
看起来像
BOARD_WIDTH == BOARD_HEIGHT(两者都是7),但@chux 提出的观点对于一致性是正确的。 -
您说“不起作用”,但您没有说它如何不起作用。请更加明确。请注意,使用
'\t'表示无效可能是个坏主意;使用常规打印字符,例如x。我并不完全相信循环打印中的标签,但如果你使用x(或@或任何其他常规可打印字符),你应该会更好。 -
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及重现它所需的最短代码在问题本身。没有明确问题陈述的问题对其他读者没有用处。