【发布时间】:2017-08-29 08:10:47
【问题描述】:
好的,所以我有这个代码(声明是全局的)。它基本上是一个简单的国际象棋程序,程序的这一部分试图评估哪些领域在某个时间点受到黑子的威胁。如果一个字段受到威胁,它的 c3[][] 值会从 0 变为 1。问题是即使在我 100% 确定 if 条件满足之后,程序仍然会拒绝设置 c3[][ ] 值为 1。更糟糕的是,the if(c2[I][J]==9||c2[I][J]==10) part 工作正常,这让我更难识别问题。如有需要,我可以提供整个源代码。
void atacalb()
{
int I,J;
for(I=1;I<=8;I++)
for(J=1;J<=8;J++)
{if(c2[I][J]==7){c3[I+1][J+1]=1,c3[I+1][J-1]=1;}
if(c2[I][J]==8){c3[I+2][J+1]=1,c3[I+2][J-1]=1,c3[I+1][J+2]=1,c3[I-1][J+2]=1,c3[I-2][J+1]=1,c3[I-2][J-1]=1,c3[I+1][J-2]=1,c3[I-1][J-2]=1;}
int z,x,ok;
for(I=1;I<=8;I++)
for(J=1;J<=8;J++)
if(c2[I][J]==9||c2[I][J]==10)
{
z=I,x=J,ok=1;
while((z<=8||x<=8)&&ok)
{z++,x++;
if(c2[z][x]==0)c3[z][x]=1;
else {c3[z][x]=1,ok=0;}
}
z=I,x=J,ok=1;
while((z<=8||x>=1)&&ok)
{i++,j--;
if(c2[z][x]==0)c3[z][x]=1;
else {c3[z][x]=1,ok=0;}
}
z=I,x=J,ok=1;
while((z>=1||x>=1)&&ok)
{z--,x--;
if(c2[z][x]==0)c3[z][x]=1;
else {c3[z][x]=1,ok=0;}
}
z=I,x=J,ok=1;
while((z>=1||x<=8)&&ok)
{z--,x++;
if(c2[z][x]==0)c3[z][x]=1;
else {c3[z][x]=1,ok=0;}
}
}
if(c2[I][J]==12||c2[I][J]==10)
{z=I,x=J,ok=1;
while(x<=8&&ok==1)
{x++;
if(c2[z][x]==0)c3[z][x]=1;
else {c3[z][x]=1,ok=0;}
}
z=I,x=J,ok=1;
while(z<=8&&ok==1)
{z++;
if(c2[z][x]==0)c3[z][x]=1;
else {c3[z][x]=1,ok=0;}
}
z=I,x=J,ok=1;
while(z>=1&&ok==1)
{z--;
if(c2[z][x]==0)c3[z][x]=1;
else {c3[z][x]=1,ok=0;}
}
z=I,x=J,ok=1;
while(x>=1&&ok==1)
{x--;
if(c2[z][x]==0)c3[z][x]=1;
else {c3[z][x]=1,ok=0;}
}
}
}
}
int main()
{//some code
atacalb();
//some more code
}
【问题讨论】:
-
请read about how to ask good questions,并学习如何创建Minimal, Complete, and Verifiable Example。我们需要查看那些变量声明。一些缩进也很好,可能还有一个换行符将代码分成段落,以使其更易于阅读。
-
为什么要使用逗号?
-
用
;替换所有,运算符会发生什么? -
我的猜测是尺寸是
c2[8][8],但您可以访问索引1直到8处的元素。 -
我把它做成了 c2[11][11]。我的程序在 c2[8][8] 时会表现得很奇怪,但是像这样它可以正常工作