我正在尝试模拟国际象棋运动,但不知何故,超出数组大小的值出现在数组内。
我试图找出问题所在,但找不到解决方案。
我有这个示例代码:
#include <iostream>
using namespace std;
int x1,y1;
int main(){
int n=10;
int x=5;
int y=0;
char tablero[n][n];
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
tablero[i][j]='.';
}
}
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
if(j==x || j==y){
tablero[x][y]='k';
x1=x-1; y1=y-1; tablero[x1][y1]='x';
x1=x-1; y1=y; tablero[x1][y1]='x';
x1=x-1; y1=y+1; tablero[x1][y1]='x';
x1=x; y1=y-1; tablero[x1][y1]='x';
x1=x; y1=y+1; tablero[x1][y1]='x';
x1=x+1; y1=y-1; tablero[x1][y1]='x';
x1=x+1; y1=y; tablero[x1][y1]='x';
x1=x+1; y1=y+1; tablero[x1][y1]='x';
}
}
}
for(int i=0; i<n; i++){
for(int j=0; j<n; j++)
cout<<tablero[j][i];
cout<<endl;
}
}
代码应该应该输出:
....xkx...
....xxx...
..........
..........
..........
..........
..........
..........
..........
..........
相反输出是:
....xkx...
....xxx...
..........
..........
..........
..........
..........
..........
..........
...xxx....
我该如何解决这个问题?
P.S.我是新手:P
最佳答案
此错误是由于您在数组下标中使用负值造成的。因为y==0
,有一些y1
这将等于 -1
(即 y1=y-1
=> y1=0-1
=> y1=-1
)。永远不应该在数组下标中使用负值。当 x==0
时,您的代码将出现意外行为或x==n-1
或y==n-1
还有。
如果将 if block 替换为 if(j==x || j==y)
使用以下代码,您将得到预期的结果。
for(int k=0; k<9; k++){
x1=(x + (k%3) - 1);
y1=(y + (k/3) - 1);
if(!(x1<0 || y1<0 || x1 >= n || y1>=n))
tablero[x1][y1]='x';
}
tablero[x][y]='k';
关于C++ |矩阵添加奇怪的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50654194/