我为井字问题编写了一个代码,在这个输入框中输入数字并打印出棋盘。还有一个功能是宣布获胜者,但似乎没有工作,该功能应该宣布任何规模的井字棋板(现在是5x5)的赢家。声明井字棋赢家
我做了一个double for循环,它检查字符是否与数组相同,因此它沿着行移动,另一个是列,一个对角线和另一个。由于某种原因,它没有显示任何获胜者,总是没有赢家出现。任何帮助表示赞赏。通过阅读check
变量尚未初始化的这个(结果
for(j=0; j<SIZE-1 && check == TRUE; j++){
:
#include <stdio.h>
#define TRUE 1
#define FALSE 0
#define SIZE 3
#define NONE -1
#define NOUGHTS 0
#define CROSSES 1
#define EMPTY 2
void scanBoard(int board[SIZE][SIZE]);
void printBoard(int board[SIZE][SIZE]);
int getWinner(int board[SIZE][SIZE]);
int main(void){
int board[SIZE][SIZE];
int winner;
printf("Please enter the board:\n");
scanBoard(board);
printf("Here is the board:\n");
printBoard(board);
printf("The winner is: ");
winner = getWinner(board);
if(winner == CROSSES){
printf("Crosses");
}
else if(winner == NOUGHTS){
printf("Noughts");
}
else{
printf("No one");
}
return 0;
}
void scanBoard(int board[SIZE][SIZE]){
int i;
int j;
for(i=0; i<SIZE; i++){
for(j=0; j<SIZE; j++){
scanf("%d", &board[i][j]);
}
}
}
void printBoard(int board[SIZE][SIZE]){
int i;
int j;
for(i=0; i<SIZE; i++){
for(j=0; j<SIZE; j++){
if(board[i][j] == EMPTY){
printf(". ");
}
else if(board[i][j] == CROSSES){
printf("X ");
}
else if(board[i][j] == NOUGHTS){
printf("O ");
}
}
printf("\n");
}
}
int getWinner(int board[SIZE][SIZE]){
int i;
int j;
int check;
int winner;
for(i=0; i<SIZE; i++){
for(j=0; j<SIZE-1 && check == TRUE; j++){
if(board[i][j] != board[i][j+1]){
check = FALSE;
}
}
if(check == TRUE && j == SIZE-1){
winner=board[i][0];
}
}
for(j=0; j<SIZE; j++){
for(i=0; i<SIZE-1 && check == TRUE; i++){
if(board[i][j] != board[i+1][j]){
check = FALSE;
}
}
if(check == TRUE && i == SIZE-1){
winner=board[0][j];
}
}
for(i=0; i<SIZE-1 && check == TRUE; i++){
if(board[i][i] != board[i+1][i+1]){
check = FALSE;
}
if(check == TRUE && i == SIZE-1){
winner=(board[i][i]);
}
}
for(i=SIZE; i>0 && check == TRUE; i--){
if(board[i][i] != board[i-1][i-1])
check = FALSE;
}
if(check == TRUE && i == SIZE-1){
winner=(board[i][i]);
}
return winner;
}
谢谢,只是需要额外的一点,使检查= TRUE做到了。 – Dan
1)感谢发布代码,实际上干净编译。 2)请为我们人类轻松阅读/理解代码,始终缩进。在每个开头大括号之后建议4个空格'{'并在每个大括号之前取消缩进'}'不要使用制表符,因为每个文字处理器/编辑器的制表位/制表符宽度设置不同。注意:4个空格足够宽,所以缩进仍然可见,可变宽度字体 – user3629249
比较如下:'check == TRUE'几乎总是一个坏主意。 (在这种情况下,我们知道TRUE等于什么)通常,任何不为0的值都是TRUE。所以通常最好是说:'if(check)'或'if(check!= FALSE)' – user3629249