需要一个函数在值用完后继续递减

Need a function to continue decreasing a value once it runs out of valid values

本文关键字:继续 函数 一个      更新时间:2023-10-16

因此,我正在编写一个函数,该函数应该对用户选择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循环的末尾,并且如果在所有情况下,则将设置返回值。

编辑:检查你的编译器警告,我很确定每个编译器都会给出一个"Control may reach end of non-valid function"。

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

这会起作用,但就像@πάῥεῖ表示使用CCD_ 6将是一个更好的想法。您可以使用set条件停止循环,在这种情况下,这比breaking更好

工作榜样!