C ++ | Matrix增加了奇怪的值

时间:2018-06-02 06:34:21

标签: c++ arrays matrix chess

我正在尝试模拟国际象棋的动作,但不知何故,数组大小的值出现在数组中。

我正在试图找出问题所在,但我找不到解决办法。

我有示例代码:

#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

1 个答案:

答案 0 :(得分:2)

此错误是由于您在数组下标中使用负值。由于y==0,有些y1等于-1(即。y1=y-1 =&gt; y1=0-1 =&gt; y1=-1)。您不应该在数组下标中使用负值。在x==0x==n-1y==n-1时,您的代码会出现意外行为。

如果使用以下代码替换if 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';