C++ | Матрица добавляет странные значения
Я пытаюсь смоделировать шахматные движения, но как-то значения вне размера массива появляются внутри массива.
Я пытаюсь выяснить, что не так, но я не могу найти решение.
У меня есть этот пример кода:
#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....
Как я могу это исправить?
PS Я новичок в этом:P
1 ответ
Эта ошибка связана с тем, что вы используете отрицательные значения в ваших индексах массива. Так как y==0
Есть некоторые y1
это будет равно -1
(То есть. y1=y-1
=> y1=0-1
=> y1=-1
). Вы никогда не должны использовать отрицательные значения в ваших индексах массива. Ваш код будет иметь неожиданное поведение, когда x==0
или же x==n-1
или же y==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';