2012-11-02 38 views
0

當運行下面的代碼時,我試圖更新一個井字遊戲棋盤。 當你輸入3作爲一列時,它會在遊戲板中設置2個X或O.帶有多維數組錯誤的簡單C++程序?

這裏是輸出

* * * 
* * * 
* * * 

X: Select a Row: 1 
X: Select a Col: 3 
* * X 
X * * 
* * * 

這裏的一個例子是所希望的輸出

* * * 
* * * 
* * * 

X: Select a Row: 1 
X: Select a Col: 3 
* * X 
* * * 
* * * 

下面是代碼

#include <iostream> 
#include <iomanip> 

using namespace std; 

int main() 
{ 
    int rowSelect = 0; 
    int colSelect = 0; 
    char turn = 'X'; 
    char rowcol[2][2]; 

    for(int i=0; i < 3; i++) 
    { 
     for(int j=0; j < 3; j++) 
     { 
      rowcol[i][j] = '*'; 
     } 
    } 

    for(int i=0; i < 3; i++) 
    { 
     for(int j=0; j < 3; j++) 
     { 
      cout << rowcol[i][j] << " "; 
     } 
     cout << endl; 
    } 

    cout << endl; 

    while (true) 
    { 

     cout << turn << ": Select a Row: "; 
     cin >> rowSelect; 
     while (rowSelect < 1 || rowSelect > 3) 
     { 
      cout << "I cannot accept that value, try again!" << endl; 
      cout << endl; 
      cout << turn << ": Select a Row: "; 
      cin >> rowSelect; 
     } 

    cout << turn << ": Select a Col: "; 
    cin >> colSelect; 
    while (colSelect < 1 || colSelect > 3) 
    { 
     cout << "I cannot accept that value, try again!" << endl; 
     cout << endl; 
     cout << turn << ": Select a Col: " << endl; 
     cin >> colSelect; 
    } 

    rowcol[rowSelect-1][colSelect-1] = turn; 

    if (turn == 'X') 
    { 
     turn = 'O'; 
    } 
    else 
    { 
     turn = 'X'; 
    } 

     for(int i=0; i < 3; i++) 
     { 
      for(int j=0; j < 3; j++) 
      { 
       cout << rowcol[i][j] << " "; 
      } 
      cout << endl; 
     } 

    } 

    system("PAUSE"); 
    return 0; 
} 

謝謝!

-Mike

回答

4

的問題是該陣列。儘管使用基於零的索引來訪問數組,但是該定義需要預留空間的實際元素數。

您定義rowcol爲:

char rowcol[2][2]; // This defines a 2 x 2 array 

你應該定義爲rowcol:

char rowcol[3][3]; // This defines a 3 x 3 array 

希望這有助於!

Keith

0
char rowcol[2][2]; 

在所有的情況下,由於它是一個2×2陣列i, j必須重複,直到僅< 2

3

你rowcol陣列必須是3×3:

char rowcol[3][3]; 
0
  • 您的陣列只持有每行2個元素,而你遍歷三行三列運行。您似乎對數組的編號方式感到困惑,因爲0是編程中的第一個數字(不是1),所以使用元素[0]和元素[1]可以訪問包含2個元素的數組。你需要聲明一個三元素數組,並使用[0] [1]和[2]來訪問它們。

FIX:改變char Array[3][3];