Инициализация массива работает нормально, но при попытке распечатать его обратно он печатает дополнительный столбец и неожиданный символ

Так что это компилируется без проблем. У меня проблема в том, что при печати на консоль в правом нижнем углу появляется дополнительный столбец и странный символ ascii. Если я попытаюсь уменьшить размер массива, я больше не смогу инициализировать его 9-ю элементами, и мне нужно иметь девять элементов, чтобы сделать его доской с крест-накрестом. Я думал, что это было одной ошибкой, но если так, я не могу понять, как это исправить. Я прочитал довольно много подобных вопросов типа «крестики-нолики», но у них, похоже, нет той же проблемы.

#include <iostream>

using namespace std;

int main ()
{
int countrow, countcol, play=1, subscript1, subscript2;
int ARRAY_ROWS = 3, ARRAY_COLS =3;
char board [3][3] = {{42, 42,42}, {42, 42,42}, {42, 42,42}};
char input;
while(play>0)
{
for(countrow = 0; countrow<ARRAY_ROWS; countrow++)
{
for(countcol=0; countcol<ARRAY_COLS; countcol++)
{
cout<<board [countrow][countcol];
}
cout<<board[countrow][countcol];
cout<<endl;
}
cout<<"Player 1, enter your mark using a row column coordinate system.\n";
cin>>subscript1>> subscript2;
subscript1+=1;
board[subscript1][subscript2] = 88;
cout<<"Player 2, enter your mark using a row column coordinate system.\n";
cin>>subscript1>> subscript2;
board[subscript1][subscript2] = 79;
}
system("pause");
return 0;
}

0

Решение

Вот проблема:

for(countrow = 0; countrow<ARRAY_ROWS; countrow++)
{
for(countcol=0; countcol<ARRAY_COLS; countcol++)
{
cout<<board [countrow][countcol];
}
cout<<board[countrow][countcol];
//^^^^^This one is redundant and you are accessing invalid memory block
//^^^^^^ countcol is out of bound
cout<<endl;
}
1

Другие решения

У вас есть избыточная копия следующей строки:

cout<<board[countrow][countcol];

Это приведет к появлению дополнительного столбца на строку с данными мусора (countcol = 3, за пределами массива).

1

После вашего внутреннего цикла у вас есть еще один

        cout<<board[countrow][countcol];

Который вам не нужен … Удалите его, и лишний столбец исчез.

1
По вопросам рекламы [email protected]