所以我写了一个函数,它应该计算一个数组中所有前 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/