//这是一个象棋审局函数的一部分,C1是红方左侧的车,它右边只有一个能攻击到的点,也就是M1所处的位置,所以理论上讲SC1的返回值应该是1,但实际返回的是80!不知道是怎么一回事!
//调试时,按道理Cright处满足了if语句的条件后,就会执行break,也就是跳出循环,但实际上在此循环了很多次,大家救我!
#include<stdio.h>
char C1,C2,M1,M2,P1,P2,X1,X2,S1,S2,J,B1,B2,B3,B4,B5;
char c1,c2,m1,m2,p1,p2,x1,x2,s1,s2,j,b1,b2,b3,b4,b5;
float SC1;
char SBoard[9][10] =
{
C1, 0, 0, B1, 0, 0, b1, 0, 0, c1,
M1, 0, P1, 0, 0, 0, 0, p1, 0, m1,
X1, 0, 0, B2, 0, 0, b2, 0, 0, x1,
S1, 0, 0, 0, 0, 0, 0, 0, 0, s1,
J, 0, 0, B3, 0, 0, b3, 0, 0, j,
S2, 0, 0, 0, 0, 0, 0, 0, 0, s2,
X2, 0, 0, B4, 0, 0, b4, 0, 0, x2,
M2, 0, P1, 0, 0, 0, 0, p1, 0, m2,
C2, 0, 0, B5, 0, 0, b5, 0, 0, c2
} ;
int Jud(int x,int y,int k)
{
int style;
if(SBoard[x][y]==C1||SBoard[x][y]==M1||SBoard[x][y]==P1||SBoard[x][y]==X1||SBoard[x][y]==S1||SBoard[x][y]==J||SBoard[x][y]==C2||SBoard[x][y]==M2||SBoard[x][y]==P2||SBoard[x][y]==X2||SBoard[x][y]==S2||SBoard[x][y]==B1||SBoard[x][y]==B2||SBoard[x][y]==B3||SBoard[x][y]==B4||SBoard[x][y]==B5)
{
style=1;
}
else
{
if(SBoard[x][y]==0)
{
style=0;
}
else
{
style=-1;
}
}
if(k==0)
{
return style;
}
if(k==1)
{
return -style;
}
if(k==2)
{
if(style>0)
{
return style;
}
else
{
return -style;
}
}
}
float evaluate(int Jud1)
{
//0,1
//红,黑
int i,a,flag,flag3,temp1,temp2;
float SC1=0;
;
//统计实点和机动点
for (i=1;i<=9;i++)
{
for (a=1;a<=10;a++)
{
if (SBoard[i][a]==C1)
{
//Cright
for (temp1=i+1;temp1<=9;temp1++)
{
flag3=Jud(temp1,a,2);
if (flag3==1)
{
SC1++;
break;
}
else
{
SC1++;
}
}
}
}
}
if(Jud1==0)
{
return SC1;
}
}
int main()
{
float t;
t=evaluate(0);
printf("%f\n",t);
return 0;
}
C++ 求助!为什么返回值是80?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 日不落的希望 2020-07-11 11:53关注
if (flag3==1)
{
SC1++;
break;
}
else
{
SC1++;
}//检查一下这里,条件对不对SC1都自增了解决 无用评论 打赏 举报