Встроенная функция, которая будет возвращать сумму положительного числа. - PullRequest
0 голосов
/ 25 июня 2019

У меня есть массив, и я хочу функцию stl, которая может возвращать сумму положительного и сумму отрицательного числа.

#include <iostream>    
#include <functional>   
#include <numeric>     

int myfunction (int x, int y) 
{
    if(y>0){
        return x+y;
    }
}



int main () {
int init = 0;
int numbers[] = {5,10,20,-34,56,-67,-32,16};


std::cout << "using custom function: ";
std::cout << std::accumulate (numbers, numbers+8, init, myfunction);
std::cout << '\n';


}

выводится значение мусора.

с использованием пользовательской функции: 4196215

Ответы [ 3 ]

1 голос
/ 25 июня 2019

Причина, по которой ваш «результат равен значению мусора» состоит в том, что когда y <= 0 вы возвращаете какое-то значение мусора (т. Е. Нет оператора возврата).

int myfunction (int x, int y) 
{
    if(y>0){
        return x+y;
    }

    // <<== you need to return something here, too
}

Я бы сказал return x в этомслучай, но это не будет работать для массивов, где первый элемент <= 0

0 голосов
/ 25 июня 2019

Если функция имеет тип возвращаемого значения, отличный от n void в своей сигнатуре, вам необходимо убедиться, что всегда (если не происходит какое-либо исключительное событие), возвращают некоторое значение независимо от того, какой путь вы выбрали во времявыполнение.

Ваша функция не может этого сделать, как если y<=0 вы ничего не возвращаете.

Вы можете исправить это, выполнив что-то вроде следующего:

int myfunction (int x, int y) 
{
    if(y>0)
        return x+y;
    return x;
}
0 голосов
/ 25 июня 2019

Вы, наверное, ищете что-то в этом роде:

int myfunction (int x, int y) 
{
  return x + std::max(y, 0);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...