需要一个函数在值用完后继续递减
Need a function to continue decreasing a value once it runs out of valid values
因此,我正在编写一个函数,该函数应该对用户选择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条件停止循环,在这种情况下,这比break
ing更好
工作榜样!
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 在构造函数中删除后继续执行
- 如果发生错误,则返回错误值,否则,继续执行函数
- 如何退出函数,但继续程序的其余部分
- 尝试将返回无符号值的函数分配给指向无符号的指针时,继续获取 SIGSEGV
- 如何在 C++ 中继续该函数而不退出 after else 语句
- 希望定期执行一个函数,但继续程序循环的其余部分
- 函数能否在返回语句后继续
- 我的函数的控制结构不会阻止它无限期地继续下去。为什么?
- C++生成器不会在抛出-捕获-继续时调用析构函数
- 需要一个函数在值用完后继续递减
- 结束函数,同时从该点继续读取文件
- 使用 <Windows.h> 暂停时间并继续执行其他功能的函数
- 我将如何继续在函数之间"return"字符串数组?
- 为什么这个递归函数在基本情况似乎得到满足后继续被调用
- 在继续派生函数之前先执行基函数
- 我继续在函数中从另一个数组修改的数组中获取垃圾值