C++ |矩阵添加奇怪的值

标签 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

最佳答案

此错误是由于您在数组下标中使用负值造成的。因为y==0 ,有一些y1这将等于 -1 (即 y1=y-1 => y1=0-1 => y1=-1 )。永远不应该在数组下标中使用负值。当 x==0 时,您的代码将出现意外行为或x==n-1y==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/

相关文章:

java - 泛型数组转换

javascript - 在sequelize中按长度对数组进行排序

c++ - 循环可变参数模板类参数

c++ - 寻找使用 AgentX 实现 SNMP 表的示例代码

c++ - 如何使用 cmake 一次运行所有 gtest 文件?

c++ - 通过指针访问 std::vector 元素与 end()

C 在数组中分配错误的索引

c - 矩阵中的排序列(比较词典编排) | C

tensorflow - 级联矩阵乘法是否比多个非级联矩阵乘法更快?如果是这样,为什么?

matlab删除矩阵计算中的for循环