使用 printf 时函数输出错误
Function output wrong when using printf
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;
}
在 count_flips_dir
中,您先测试 if(board[line+delta_line][col+delta_col]=='.')
,然后再检查初始移动是否留在棋盘内。
然后您测试初始移动是否保留在矩阵内以搜索颜色,而不是后续移动。
此外,函数 returns i
如果初始移动超出棋盘则未初始化。
我不确定在这种情况下函数应该 return,可能 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;
}
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;
}
在 count_flips_dir
中,您先测试 if(board[line+delta_line][col+delta_col]=='.')
,然后再检查初始移动是否留在棋盘内。
然后您测试初始移动是否保留在矩阵内以搜索颜色,而不是后续移动。
此外,函数 returns i
如果初始移动超出棋盘则未初始化。
我不确定在这种情况下函数应该 return,可能 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;
}