0

运行以下代码时,我正在尝试更新井字游戏板。当您输入 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;
}

谢谢!

-麦克风

4

4 回答 4

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

希望这可以帮助!

基思

于 2012-11-03T00:19:50.153 回答
3

您的 rowcol 数组需要为 3x3:

char rowcol[3][3];
于 2012-11-02T23:57:16.153 回答
0
char rowcol[2][2];

在所有情况下,i, j必须只迭代直到< 2它是一个 2x2 数组。

于 2012-11-02T23:55:10.703 回答
0
  • 您的数组每行仅包含 2 个元素,而您的循环运行三行三列。您似乎对数组的编号方式感到困惑,将使用元素 [0] 和元素 [1] 访问具有 2 个元素的数组,因为 0 是编程中的第一个数字(不是 1)。您需要声明一个包含三个元素的数组,并使用 [0] [1] 和 [2] 访问它们。

修复:更改为char Array[3][3];

于 2012-11-02T23:58:24.653 回答