C++ 代码覆盖变量,但不应覆盖

C++ 代码覆盖变量,但不应覆盖,c++,c++11,conditional-statements,c++14,do-while,C++,C++11,Conditional Statements,C++14,Do While,下面的代码片段是Tictatcoe游戏的一部分。 我遇到的问题是,每当我运行代码并到达输入行和列的点时,代码工作正常,除了一件事。当我输入第1行第1列时,代码将正确显示第一个X,但当我输入第二个第1行第1列时,它会将网格中的X切换为O,尽管它不应该。我认为do while循环中的条件足以在第二次输入行/列组合时不覆盖网格。但似乎并非如此 char grid[3][3] = { {' ', ' ', ' '}, {' ', ' ', ' '}, {' ', ' ', '

下面的代码片段是Tictatcoe游戏的一部分。 我遇到的问题是,每当我运行代码并到达输入行和列的点时,代码工作正常,除了一件事。当我输入第1行第1列时,代码将正确显示第一个X,但当我输入第二个第1行第1列时,它会将网格中的X切换为O,尽管它不应该。我认为do while循环中的条件足以在第二次输入行/列组合时不覆盖网格。但似乎并非如此

char grid[3][3] = { 
    {' ', ' ', ' '},
    {' ', ' ', ' '},
    {' ', ' ', ' '}
    };

do {
    int row, column;
    for (int i = 1; i <= 9; i++)
        do {
            ...
            ...
            std::cout << "* Enter row   : ";
            std::cin >> row;
            std::cout << "* Enter column: ";
            std::cin >> column;

        } while ((row < 1 || row > 3) && (column < 1 || column > 3) && (grid[row-1][column-1] != ' '));

        if (i % 2 == 0)
            grid[row-1][column-1] = 'O';
        else
            grid[row-1][column-1] = 'X';
    }   // For loop close
} while (true);
char grid[3][3]={
{' ', ' ', ' '},
{' ', ' ', ' '},
{' ', ' ', ' '}
};
做{
int行,列;
对于(int i=1;i行;
std::cout>列;
}而((行<1 | |行>3)和(列<1 | |列>3)和(&(网格[row-1][column-1]!=”);
如果(i%2==0)
网格[第1行][第1列]=“O”;
其他的
网格[第1行][第1列]=“X”;
}//用于循环闭合
}虽然(正确);

希望你们能帮我。祝你们晚上愉快。干杯。

这就是你们想要的吗

char grid[3][3] = { 
    {' ', ' ', ' '},
    {' ', ' ', ' '},
    {' ', ' ', ' '}
    };

int i = 0;

do {
    int row, column;
        do {
            ...
            ...
            std::cout << "* Enter row   : ";
            std::cin >> row;
            std::cout << "* Enter column: ";
            std::cin >> column;

        } while (row < 1 || row > 3 || column < 1 || column > 3 || (grid[row-1][column-1] != ' ')); //Check if input is valid.

        if (i % 2 == 0)
            grid[row-1][column-1] = 'O';
        else
            grid[row-1][column-1] = 'X';

        i++; //Increment i only if input is valid.
} while (9 > i); //Exit the loop when all 9 valid inputs are entered.
char grid[3][3]={
{' ', ' ', ' '},
{' ', ' ', ' '},
{' ', ' ', ' '}
};
int i=0;
做{
int行,列;
做{
...
...
标准::cout>行;
std::cout>列;
}while(row<1 | | row>3 | | column<1 | | | column>3 | | |(grid[row-1][column-1]!='')//检查输入是否有效。
如果(i%2==0)
网格[第1行][第1列]=“O”;
其他的
网格[第1行][第1列]=“X”;
i++;//仅当输入有效时才递增i。
}while(9>i);//输入所有9个有效输入后退出循环。

我删除了for循环,这样它就可以处理错误的输入。

当所有条件都为true(
&&
)时,您可以循环,但如果我已经正确理解了,则一个条件true将是无效的移动(即改用
|
)您是否尝试过使用调试器单步执行代码以查看它到底在做什么?如果没有,为什么不?非常感谢您为我修复了它:)@xcuse.h4x我的代码正在进入无限循环。我做了一个小改动(添加了“while(9>I)”)。将此更改带到您的项目中。