C 程序拒绝将值设置为矩阵
C++ program refuses to set value to matrix
好,所以我有此代码(声明为全局)。这基本上是一个简单的国际象棋程序,该计划的这一部分试图评估哪些字段在某个时间点受到黑色碎片的威胁。如果一个字段受到威胁,则C3 [] []值从0到1。问题是,即使我100%确定是否满足条件,该程序仍将拒绝设置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
}
使用适当的压力和括号放置是关键!我剥离完成了所有代码,实际上是处理内容,只是左循环和IF statements以供可读性。然后,我正确地缩进了编译器如何看到它的代码
int I, J;
for(I = 1; I <= 8; I++)
for(J = 1; J <= 8; J++) {
if(c2[I][J] == 7) {
}
if(c2[I][J] == 8) {
}
for(I = 1; I <= 8; I++)
for(J = 1; J <= 8; J++) /*!*/
if(c2[I][J] == 9 || c2[I][J] == 10) { ///< only this gets processed by the loop
while((z <= 8 || x <= 8) && ok){
if(c2[z][x] == 0) {
}
else {
}
}
while((z <= 8 || x >= 1) && ok) {
if(c2[z][x] == 0) {
}
else {
}
}
while((z >= 1 || x >= 1) && ok) {
if(c2[z][x] == 0) {
}
else {
}
}
while((z >= 1 || x <= 8) && ok) {
if(c2[z][x] == 0) {
}
else {
}
}
}
if(c2[I][J] == 12 || c2[I][J] == 10) { ///< not this
while(x <= 8 && ok == 1) {
if(c2[z][x] == 0) {
}
else {
}
}
while(z <= 8 && ok == 1) {
if(c2[z][x] == 0) {
}
else {
}
}
while(z >= 1 && ok == 1) {
if(c2[z][x] == 0) {
}
else {
}
}
while(x >= 1 && ok == 1) {
if(c2[z][x] == 0) {
}
else {
}
}
}
}
问题在上面的代码中标记:For循环(标记的/*!*/
)不会仅处理IF-Statement(if(c2[I][J] == 12 || c2[I][J] == 10)
)仅在标记循环后的第一个IF语句。解决此操作的一种方法是在这种情况下使用IF-Else statement,或用卷曲的支架包围所有循环。这是为了使您可以添加和删除括号内的线条,并且可以确保它们也将被处理。此外,这也使该程序更清楚地对非编译器阅读器(即试图理解代码的人)。
也取决于c2
的大小,这可能是8x8阵列,您应该更改循环条件。C 使用0个索引数组,因此索引从0-7而不是1-8访问了一个大小8的数组。因此,例如
for(I = 1; I <= 8; I++)
for(J = 1; J <= 8; J++) {
//...
很可能应该是
for(I = 0; I < 8; I++) // smaller not smaller-equal
for(J = 0; J < 8; J++) {
// ...
如果您想在代码中调试基本问题,则需要停止尝试玩C 高尔夫。在适当的地方添加空白,包括新行。
在所讨论的行上设置一个断点,该线路将您的数组位置设置为1,然后用该变量上的手表逐行逐步浏览代码。我可以保证它不会"拒绝设置它"。它是您不希望执行执行的代码中的分支。
- 有可能在信号处理程序中设置promise吗
- 如何在提升程序选项中设置矢量<矢量>的默认值<string>
- 设置我的应用程序 API 感知并防止系统使其模糊和错误定位
- 我可以对 2 个或更多应用程序进行 QSettings 设置吗?
- 如何设置Qt应用程序以使用类Unix系统的实际环境变量?
- 适用于 macOS 的 Xcode 应用程序。这就是我设置从USB麦克风输入获取音频的方式。一年前工作,现在没有了。为什么
- 设置变量时C++程序挂起
- 如何将从控制台应用程序C++回调设置为C++ COM DLL
- 使用代码在 AWS 开发工具包C++控制台应用程序上设置凭证
- 如何设置一个简单的CGAL+Qt程序
- PyFunctionObject 在 Py_Finalize 中使程序崩溃,如果它在 PyTuple 中被设置了项目
- Haskell堆栈设置 - 无法识别CPP程序
- 如何使用CMake在Windows上将应用程序入口点设置为main()C++?
- 模板类中的设置程序
- 设置程序可以生成的进程数限制
- 如何正确设置程序变量
- 如何在源代码中设置程序执行的优先级
- 使用Win32 API设置程序描述和公司名称
- 使用WIN32 API在没有资源的情况下设置程序图标
- 如果这在C++设置程序中使用,有关系吗