具有多维数组错误的简单C ++程序?

时间:2012-11-02 23:52:27

标签: c++ multidimensional-array

运行以下代码时,我正在尝试更新Tic Tac Toe游戏板。 当您键入3作为列时,它会在游戏板中设置2个X或O.

以下是输出

的示例
*  *  *
*  *  *
*  *  *

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 个答案:

答案 0 :(得分: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

希望这有帮助!

基思

答案 1 :(得分:3)

你的rowcol数组必须是3x3:

char rowcol[3][3];

答案 2 :(得分:0)

char rowcol[2][2];

在所有情况下,i, j必须只迭代< 2,因为它是2x2数组。

答案 3 :(得分:0)

  • 您的数组每行只包含2个元素,而您的循环遍历三行和三列。您似乎对数组的编号方式感到困惑,使用元素[0]和元素[1]可以访问具有2个元素的数组,因为0是编程中的第一个数字(不是1)。你需要声明一个三元素数组,并使用[0] [1]和[2]访问它们。

FIX:更改为char Array[3][3];