以下代码段是TicTacToe游戏的一部分。 我遇到的问题是,无论何时我运行代码并进入我输入行和列的位置,代码工作正常,除了一件事。当我进入第1行第1列时,代码将正确显示第一个X,但是当我进入第二行1列1时,它将使用O切换网格中的X,尽管它不应该。我认为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);
希望你们能帮助我。祝你有个美好的夜晚。欢呼声。
答案 0 :(得分:-1)
这是你在找什么?
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.
我删除了for循环,因此它会处理错误的输入。