我爲井字問題編寫了一個代碼,在這個輸入框中輸入數字並打印出棋盤。還有一個功能是宣佈獲勝者,但似乎沒有工作,該功能應該宣佈任何規模的井字棋板(現在是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