2012-11-02 81 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];