代码会覆盖变量,尽管它不应该

时间:2016-10-21 18:53:16

标签: c++ c++11 conditional-statements c++14 do-while

以下代码段是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);

希望你们能帮助我。祝你有个美好的夜晚。欢呼声。

1 个答案:

答案 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循环,因此它会处理错误的输入。