【发布时间】:2021-12-26 19:59:53
【问题描述】:
printf("\n%d",NN+NE+ND+SD+SE+SS+E+D);
这是我的函数,当我在主函数中调用 checkmoves 时,它们给了我一个正确的值 4,但是当我添加上面的 printf 以检查一些值以尝试解决另一个问题时,函数 checkmoves 给我返回 13 4 个。
请注意,我像 printf("\n%d", checkmoves(board,'o')); 一样调用 main
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;
}
【问题讨论】:
-
函数
checkmoves可以返回0到64之间的值。那么,为什么它应该是4而不是13呢?两者都是有效值。顺便提一句。checkmoves不返回表达式NN+NE+ND+SD+SE+SS+E+D的结果,那么为什么将此输出与checkmoves将返回的结果进行比较呢?也许我没听懂这个问题。 -
@ErdalKüçük 因为它正在计算可能的移动次数,所以正确的移动次数是 4 而不是 13 所以这就是为什么结果会因为 printf 而改变所以我不知道是什么改变了它
-
你是说
checkmoves给你4,但是当你添加printf("\n%d",NN+NE+ND+SD+SE+SS+E+D);(我假设在函数flanked中)你得到的值是13?那(确实)不应该是可能的,除非发生了一些不同的事情(我们看不到)。您不提供代码,以便它能够重现您的问题。 -
标签: c function error-handling printf