printf("\n%d",NN NE ND SD SE SS E D);
這是我的函式,當我在主函式中呼叫 checkmoves 時,它們給了我一個正確的值 4,但是當我添加上面的 printf 來檢查一些值以嘗試解決另一個問題時,函式 checkmoves 給我回傳 13 而不是 4。
請注意,我在 main 中呼叫 printf("\n%d", checkmoves(board,'o'));
int count_flips_dir(char board[8][8],int line, char col,int delta_line,int delta_col,char color){
int i;
if(board[line delta_line][col delta_col]=='.'){
return 0;
}
if (delta_line line<=7 && delta_line line>=0){
if (delta_col col<=7 && delta_col col>=0){
for(i=0;board[line delta_line][col delta_col]!=color;i ){
line=delta_line line;
col=delta_col col;
if(board[line delta_line][col delta_col]=='.'){
return 0;
}
}
}
}
return i;
}
int flanked(char board[8][8],int line,char col,char color ){
int NN = count_flips_dir(board,line,col,-1,0,color);
int ND = count_flips_dir(board,line,col,-1,1,color);
int NE = count_flips_dir(board,line,col,-1,-1,color);
int SS = count_flips_dir(board,line,col,1,0,color);
int SD = count_flips_dir(board,line,col,1,1,color);
int SE = count_flips_dir(board,line,col,1,-1,color);
int D = count_flips_dir(board,line,col,0,1,color);
int E = count_flips_dir(board,line,col,0,-1,color);
return NN NE ND SD SE SS E D;
}
int checkmoves(char board[8][8],char color){
int i;
int count=0;
char j;
for(i=0;i<8;i ){
for(j=0;j<8;j ){
if (board[i][j]=='.'){
if (flanked(board,i,j,color)>0){
count ;
}
}
}
}
return count;
}
uj5u.com熱心網友回復:
在檢查初始移動是否留在板內之前進行count_flips_dir測驗if(board[line delta_line][col delta_col]=='.')。
然后您測驗初始移動是否停留在矩陣內以搜索顏色,而不是后續移動。
此外,i如果初始移動超出棋盤,該函式將回傳未初始化。
我不確定在這種情況下函式應該回傳什么,可能是0.
這是一個修改后的版本:
int count_flips_dir(char board[8][8], int line, int col,
int delta_line, int delta_col, char color) {
for (int i = 0;; i ) {
line = delta_line;
col = delta_col;
if (line < 0 || line >= 8 || col < 0 || col >= 8)
return 0;
if (board[line][col] == color)
return i;
if (board[line][col] == '.')
return 0;
}
return i;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/398020.html
上一篇:很可能我在某處錯誤地分配了記憶體
