簡體   English   中英

Function output 使用 printf 時出錯

[英]Function output wrong when using printf

printf("\n%d",NN+NE+ND+SD+SE+SS+E+D);

This is my functions when I call checkmoves in the main function they give me a value of 4 that it is correct but when I add the printf above to check some values to trying solve another problem the function checkmoves give me back 13 instead of 4.

請注意,我調用 main like 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;
}

count_flips_dir ,您測試if(board[line+delta_line][col+delta_col]=='.')在檢查初始移動是否留在棋盤內之前。

然后您測試初始移動是否停留在矩陣內以搜索顏色,而不是后續移動。

此外,如果初始移動超出電路板,function 將返回i uninitialized。

我不確定 function 在這種情況下應該返回什么,可能是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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM