【问题标题】:value in an array doesn't seem to be incremented after a for loop c++在for循环c ++之后,数组中的值似乎没有增加
【发布时间】:2011-10-11 12:59:57
【问题描述】:

我知道 if 语句 if ( (roll == i) && (result == true) ) 在 2500 次迭代期间多次为真,但是当我在更高级别的 for 循环完成其 2500 次迭代后输出 winRolls[1] 或 winRolls 的任何其他索引时, winRolls[1] 的值,并且所有其他索引的最大值始终为 1。这是否与 c++ 数组的特性有关,还是我缺少其他东西?

int winRolls[10]      
for (int i = 0; i < 2500; i++)
{
    for (int j = 1; j < 10; j++)
        if ( (roll == j) && (result == true) )
        {
            winRolls[roll] = winRolls[roll] + 1;
        }
}
cout << winRolls[1] << endl;
cout << winRolls[2] << endl; 
cout << winRolls[3] << endl;

【问题讨论】:

  • 您永远不会在代码示例中修改 roll,因此您总是递增相同的数组元素,并且由于我们不知道 roll 的初始值,我们无法判断它是哪个元素。还要记住,数组索引在 C++ 中是从零开始的。
  • result 最初的值是多少??
  • roll 也没有初始化。
  • 只是快速浏览一下,但是您是否故意将 j 从 1 开始? c(和 c++)数组的索引为 0。
  • 不完整的代码,永远不要说“我知道一个陈述是真的”,测试它或向我们展示一些数据;)

标签: c++ arrays for-loop


【解决方案1】:

您的代码几乎没有问题。

winRolls 的大小是 [10],并且您正在基于 i 访问它(而不是 j,它对 winRolls 有正确的限制)。如果roll == i 是true 比如说1000,那么您正在访问超出数组范围。这不会帮助您获得所需的输出以及输入未定义的行为。

【讨论】:

    【解决方案2】:

    你在哪里初始化winRolls?如果你不初始化而是增加它的内容,你最终可能会得到垃圾值(在程序的每次运行中都不同的值)。此外,在 25000 次迭代中,roll == i 将如何多次为真?除非您要更新 roll 的值(我在代码中没有看到),否则这个内部循环将只执行一次,或者可能永远不会执行,具体取决于 roll 的值。

    【讨论】:

      【解决方案3】:

      最后试试cout &lt;&lt; winRolls[roll] &lt;&lt; endl;。

      您每次都在增加winRolls[roll] 中的值。

      看起来这里的代码是正确的。您的问题可能在代码的其他地方。

      【讨论】:

        猜你喜欢
        • 2020-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-09
        • 1970-01-01
        • 1970-01-01
        • 2018-03-26
        • 1970-01-01
        相关资源
        最近更新 更多