【问题标题】:Why can't I define a count variable outside of my loop in this function (C++)为什么我不能在这个函数的循环之外定义一个计数变量(C++)
【发布时间】:2020-12-14 03:56:43
【问题描述】:

这是一个非常基本的问题,我知道,但我正在解决以下简单的练习:

my2Darray 是一个二维数组,包含 nRows 行和 nCols 列。编写一个函数,对每一列中的所有元素求和,并将它们返回到一个名为的数组中 按列总计。编写第二个函数,对每一行中的所有元素求和,并将它们返回到一个名为 totalsByRow 的数组中。

我的代码现在运行良好,但我很好奇为什么以下函数不起作用:

void colSum (int arrayArg[nRows][nCols]) {

    static int sumofCols[nCols] = {};
    int rowcount = 0;

    for (int i = 0; i < nCols; i++) {
        for ( ; rowcount < nRows; rowcount++) {
            sumofCols[i] += arrayArg[rowcount][i];
        }
        cout << sumofCols[i] << endl;
    }
}

为什么我不能在嵌套的for 循环之外创建这个rowcount 变量?我用作函数参数的数组中只有两行的第一列被汇总到sumofCols[0],这导致sumofCols[1]等于0。当我将rowcount设置在第一个@的边界内时987654327@ 循环,或第二个循环,迭代按预期工作。

for (int rowcount = 0; rowcount < nRows; rowcount++)

这是我必须使用的代码。

我只是想确保我 100% 了解我正在做的事情,因为 C++ 对于像我这样的初学者来说可能会很困惑。

哦,我确实更改了这个函数以返回一个 int* 值,因为我基本上是根据练习需要将 sumofCols 分配给另一个数组。

【问题讨论】:

  • 在每次迭代期间你在哪里初始化rowcount
  • 在外部for循环的每次迭代中(即i递增时),您需要将rowCount重置为0
  • 那就是问题所在,ChrisMM,非常感谢。我首先在for循环之外有这个rowcount变量的原因是因为我最初尝试了一个while循环来向sumofCols [i]添加值,我猜我在错误的位置将rowCount重置为0。跨度>

标签: c++ arrays function


【解决方案1】:

因为第一次迭代后 rowCount 将等于 nRows。对于外循环的第二次迭代,它不会重新初始化为 0,因此 for ( ; rowcount &lt; nRows; rowcount++) 循环内的代码不起作用。在内部循环的迭代之后,您必须将 rowCount 的值重置为 0。如果您真的想在循环之外声明 rowCount,您可以执行以下操作,

void colSum (int arrayArg[nRows][nCols]) {

    static int sumofCols[nCols] = {};
    int rowcount = 0;

    for (int i = 0; i < nCols; i++) {
        for ( ; rowcount < nRows; rowcount++) {
            sumofCols[i] += arrayArg[rowcount][i];
        }
        cout << sumofCols[i] << endl;
        rowCount = 0; // Here we are resetting the value to 0.
    }
}

【讨论】:

  • 谢谢你,这是一个非常愚蠢的错误,谢谢你的回答。
猜你喜欢
  • 2018-06-08
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 2019-06-06
  • 1970-01-01
  • 2015-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多