【问题标题】:C++ 2D algorithm code is reading the array wrongC++ 2D 算法代码读取数组错误
【发布时间】:2021-12-09 07:48:25
【问题描述】:

正如标题所说,我的代码读取的二维数组完全错误。

    const int WINNING_ROWS[8][3] = { (0, 1, 2),
                                     (3, 4, 5),
                                     (6, 7, 8),
                                     (0, 3, 6),
                                     (1, 4, 7),
                                     (2, 5, 8),
                                     (0, 4, 8),
                                     (2, 4, 6) };

上面是我的二维数字数组。 我的程序似乎无法正确读取。

例如,如果我要询问第 2 行第 1 项,我希望得到 7,但它却给了我 6。 这是我已经完成的行和项目请求的列表,以尝试找出这里出了什么问题。

  • 第 0 行,第 0 项,预期结果 0,实际结果 2
  • 第 3 行,第 2 项,预期结果 6,实际结果 0
  • 第 1 行,第 0 项,预期结果 3,实际结果 6
  • 第 5 行,第 1 项,预期结果 5,实际结果 0
  • 第 8 行,第 2 项,预期结果 6,实际结果 13629648
  • 第 7 行,第 2 项,预期结果 6,实际结果 0

作为参考,这是我一直用来从数组中调用项目的代码

cout << WINNING_ROWS[7][2] << endl;

编辑 1:忽略粗体项,这是我在测试代码时的错误。

编辑 2:我的问题已得到解答。

【问题讨论】:

  • WINNING_ROWS[8][2] 超出了数组的范围。您正在读取 8 行矩阵的第 9 行。
  • 您的 ( ) 是您的问题。在此处使用 {} 而不是 ():https://ideone.com/LSofPh

标签: c++ arrays visual-c++


【解决方案1】:
const int WINNING_ROWS[8][3] = { (0, 1, 2),
                                     (3, 4, 5),
                                     (6, 7, 8),
                                     (0, 3, 6),
                                     (1, 4, 7),
                                     (2, 5, 8),
                                     (0, 4, 8),
                                     (2, 4, 6) };

这并不意味着你认为它做了什么。 (0,1,2) 不是由三个元素组成的行,而是使用逗号运算符计算的单个整数。 0,1,2 计算结果为 2

您需要使用正确的{...} 大括号而不是括号,或者完全省略它们。


还建议您将const 更改为constexpr

【讨论】:

  • 谢谢你,非常感谢。我自己永远无法捕捉到这一点。
  • 这些可能是最难找到的东西!
【解决方案2】:

WINNING_ROWS[8][2] 超出数组范围,这意味着它将导致未定义的行为。如果你想获取最后一个元素,你应该尝试cout &lt;&lt; WINNING_ROWS[7][2] &lt;&lt; endl;,因为它们是 0 索引的。

【讨论】:

  • 谢谢你,我忘了从 0 开始计算该实例中调用数组的那一半,但是普遍存在的问题仍然存在,我的其余代码似乎没有阅读数组右边。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
  • 2017-05-06
  • 1970-01-01
  • 2016-02-20
  • 2013-10-12
相关资源
最近更新 更多