【问题标题】:Code overwrites variables although it should not代码会覆盖变量,尽管它不应该
【发布时间】:2017-03-04 04:15:51
【问题描述】:

以下代码 sn-p 是井字游戏的一部分。 我遇到的问题是,每当我运行代码并到达我输入行和列的位置时,代码工作得很好,除了一件事。当我输入第 1 行第 1 列时,代码将正确显示第一个 X,但是当我输入第二行第 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);

希望你们能帮助我。祝你有个愉快的夜晚。干杯。

【问题讨论】:

  • 你在所有条件都为真时循环(&amp;&amp;),但如果我理解正确,一个条件为真将是无效的移动(即改用||
  • 您是否尝试过使用调试器单步执行代码以查看其具体在做什么?如果没有,为什么不呢?

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


【解决方案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 循环,以便它处理错误的输入。

【讨论】:

  • 非常感谢为我解决了这个问题 :)
  • @xcuse.h4x 我的代码进入了无限循环。我做了一个小改动(添加了“while (9 > i)”)。将此更改应用于您的项目。
猜你喜欢
  • 2019-04-20
  • 2021-12-06
  • 2018-06-05
  • 2019-03-12
  • 1970-01-01
  • 2013-09-19
  • 2020-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多