2013-03-25 9 views
0

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

#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; 
} 
+2

Неопределенное поведение: 'cout << доска [countrow] [countcol];' – chris

+0

Спасибо всем. По-видимому, я неправильно понял раздел по обработке массивов. –

ответ

1

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

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]; 

Что вам не нужно ... Удалить это и дополнительный столбец исчез.

+0

Спасибо, я не знаю, почему я думал, что мне это нужно. –