【问题标题】:Need a function to continue decreasing a value once it runs out of valid values一旦用完有效值,需要一个函数来继续减少一个值
【发布时间】:2014-11-06 20:32:42
【问题描述】:

所以我编写了一个函数,该函数应该计算用户选择 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}

并要求它计算前 2 个偶数之和,它将输出 6

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

为什么要减一?

【问题讨论】:

  • 我建议使用std::vector&lt;int&gt; 来获取结果。
  • 请考虑接受对您有帮助的答案,以便其他用户立即看到为您解决问题的方法。

标签: c++ function for-loop controls call


【解决方案1】:

如果在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 循环的末尾,并且在所有情况下都会设置返回值。

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

【讨论】:

    【解决方案2】:
    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;
    }
    

    这会起作用,但就像@πάντα ῥεῖ 所说,使用vectors 会是一个更好的主意。 您可以使用设置条件停止循环,在这种情况下,这比 breaking 更好。

    Working example!

    【讨论】:

    • +1 表示不使用 break 语句向 for 循环添加额外条件
    猜你喜欢
    • 2013-03-31
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多