c++ - 需要一个函数在用完有效值后继续减少值

标签 c++ function for-loop controls call

所以我写了一个函数,它应该计算一个数组中所有前 N 个偶数,用户选择 N。这很好,但是如果数组中的偶数少于 N 个,那么该函数应该只需将它们全部添加,这是我遇到困难的部分。

函数调用:

cout << "The sum of the first " << userSum << " even numbers is: " <<
SumEvens(list, SIZE, userSum) << endl;

函数定义:

int SumEvens(int arr[], const int size, int evensAdd)
{
    int sum = 0;
    for (int i = 0; i < size; i++){
        if (arr[i] % 2 == 0 && arr[i] != 0){//if the number is even and not 0 then that number is         added to the sum
            evensAdd--;
            sum += arr[i];
        }
        if(evensAdd == 0)//once evensAdd = 0(N as previously mentioned) then the function will return the sum
            return sum;
    }   
}

例如,如果我有一个数组:{1,2,3,4,5}

并要求它计算输出 6 的前 2 个偶数的总和

但是,如果我要求它计算前 3、4 或 5 个偶数,它将输出总和为 6

为什么要减一?

最佳答案

如果在 evensAdd 达到 0 之前完成 for 循环,则永远不会到达 return sum 语句,因此不会设置函数的返回值。返回的值只是从堆栈中读取的随机数。这只是一个技术问题,正确的做法应该是这样的:

int SumEvens(int arr[], const int size, int evensAdd)
{
    int sum = 0;
    for (int i = 0; i < size; i++)
    {
        if (arr[i] % 2 == 0 && arr[i] != 0)
        {
            evensAdd--;
            sum += arr[i];
        }
        if (evensAdd == 0)
        {
            break;
        }
    }
    return sum;
}

使用break 将立即跳转到for 循环的末尾,并且在所有情况下都会设置返回值。

编辑:检查你的编译器警告,我很确定每个编译器都会给出“控件可能到达非空函数的结尾”。

关于c++ - 需要一个函数在用完有效值后继续减少值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26788867/

相关文章:

javascript - 如何从 for 循环中的回调内部中断

c++ - 程序的输出与传递的参数不同

c++ - 使用 LogonUserW 并使用句柄执行应用程序

c++ - 在两个节点上 boost ptree 迭代

c++ - C++ 中指针的运行时多态性

c++ - 为什么这两个相似的功能之一崩溃而一个工作正常?

python-3.x - 从 Python 3 for 循环打印时是否可以插入除最后一个分隔符之外的所有分隔符?

c - 使用emacs获取函数原型(prototype)

Python用另一个函数调用一个函数

r - 如果出错,则在 R 中的 for 循环中进行下一次迭代