我试着做一个C++ Tic Tac Toe游戏,但没有得到正确的输出。 我试图制作一个C++程序,但每次都得到错误的结果。

我试着做一个C++ Tic Tac Toe游戏,但没有得到正确的输出。 我试图制作一个C++程序,但每次都得到错误的结果。,c++,turbo-c++,C++,Turbo C++,每当我分别指定x和y坐标2和3时,它将其中两个元素指定为“x”,而不仅仅是一个。我已经试过很多次了 代码: 你的错误很简单: 您正在使用[2][2]数组,但确实需要[3][3]数组。您可以使用[0]、[1]、[2]。。。但要定义它的实际大小,需要使用最大索引+1 所以,在这个例子中,[a 3 ] [3 ]。< /p>无关:如果你在编译器中有选择,不要使用Turbo C++。那个笨蛋已经过时几十年了。有很多免费的替代品,例如VisualStudio社区版,这不是30年的过时。我不是C++中的那种公

每当我分别指定x和y坐标2和3时,它将其中两个元素指定为“x”,而不仅仅是一个。我已经试过很多次了

代码:

你的错误很简单: 您正在使用[2][2]数组,但确实需要[3][3]数组。您可以使用[0]、[1]、[2]。。。但要定义它的实际大小,需要使用最大索引+1


所以,在这个例子中,[a 3 ] [3 ]。< /p>无关:如果你在编译器中有选择,不要使用Turbo C++。那个笨蛋已经过时几十年了。有很多免费的替代品,例如VisualStudio社区版,这不是30年的过时。我不是C++中的那种公司,但是你不应该将数组char A [3 ] [3 ]标注成Car A[2 ] [2 ],如果你想要3x3元素?我今天懒惰。使用调试器时,哪些语句会导致问题?请用这些信息编辑您的帖子,并指出预期的变量值和实际值。顺便说一句,主函数会向操作系统返回一个int。始终如此。@ThomasMatthews在这里,main的返回类型为void,因此不需要返回语句。。。然而,在这个社区和像你这样的人的帮助下,我解决了我的小错误……我真的有一种误解,认为[2][2]的数组将有9个元素,索引为0,1,2,表示行和列。
#include<iostream.h>
#include<conio.h>
void reset(char a[2][2])
{
    for(int i = 0; i < 3; i++)
        for(int j = 0; j < 3; j++)
            a[i][j] = '_';
}
void dispmat(char a[2][2])
{
    for (int k = 0; k < 3; k++)
    {
        for(int l = 0; l < 3; l++)
            cout << a[k][l] << '\t';
        cout << endl;
    }
}
void getcoordinates(int &x, int &y)
{
    cout << "Enter the row: "<< endl;
    cin >> x;
    cout << "Enter the column:" << endl;
    cin >> y;
    x--;
    y--;
}
void main()
{
    clrscr();
    char a[2][2],yon = 'y';
    int t = 2,x,y, flag = 0;
    do
    {
        reset(a);
        for(int h = 0; h < 9; h++)      // max no. of cells to be filled = 9
        {
            clrscr();
            dispmat(a);             // displays matrix
            if(t++%2 == 0)          // X's turn
            {
                cout << "It is X \'s chance now" << endl;
                getcoordinates(x,y);
                a[x][y] = 'x';
                for(int m = 0; m < 3; m++)
                    //if any one condition is true, x is declared the winner
                    if((a[m][0] == a[m][1] && a[m][1] == a[m][2] && a[m][2] == 'x')||(a[0][m] == a[1][m]&&a[1][m] == a[2][m] && a[2][m] == 'x')||(a[0][0] == a[1][1]&&a[1][1] == a[2][2] && a[2][2] == 'x')||(a[2][0] == a[1][1]&&a[1][1] == a[0][2] && a[0][2] == 'x'))
                    {
                        flag = -1;   //if flag = 1, x wins
                                 //if flag = -1, 0 wins
                                 // if flag = 0, its a draw
                        break;
                    }
                if (flag == -1||flag == 1)
                    break;
            }
            else              // 0's turn
            {
                cout << "It is 0 \'s chance now" << endl;
                getcoordinates(x,y);
                a[x][y] = '0';
                for(int n = 0; n < 3; n++)
                    if((a[n][0] == a[n][1] && a[n][1] == a[n][2] && a[n][2] == '0')||(a[0][n] == a[1][n]&&a[1][n] == a[2][n] && a[2][n] == '0')||(a[0][0] == a[1][1]&&a[1][1] == a[2][2] && a[2][2] == '0')||(a[2][0] == a[1][1]&&a[1][1] == a[0][2] && a[0][2] == '0'))
                    {
                        flag = 1;
                        break;
                    }
                if(flag == 1)
                    break;

            }
        }
        if(flag == 1)
            cout << "Winner is 0!" << endl;
        else if(flag == -1)
            cout << "Winner is X!" << endl;
        else
            cout << "It is a draw!" << endl;
        cout << "Do you want to continue?" << endl;
        cin >> yon;
    } while(yon == 'y' || yon == 'Y');
    getch();
}