值始终返回为零?

时间:2017-10-27 05:09:57

标签: c++ loops return do-while

我必须编写一个执行某些数学函数的循环,并随时累积答案。但由于某种原因,currentNum,我的返回值,一直返回为0。我尝试将currentNum声明为switch语句中的一些num,认为它可以工作,因为currentNum是一个全局语句,但它也返回零;所以我试过这个,这也归零了?另外,我如何返回-1?当我返回-1时,控制台声明程序返回255而不是-1。

# include <iostream>
using namespace std;

int accumulate(double currentNum, double num, char op);

char op, x, X;
double currentNum, num;

int main(){ 

    do{
    cout << "Current: " << currentNum << endl;

    cout << "Next operation: ";
    cin >> op;

    if(!(op == '+' || op == '-' || op == '*' || op == '/')){
        cout << "Invalid operation!";
        return -1;
    }

    cout << "Next Number: ";
    cin >> num;

    accumulate(currentNum, num, op);

    }while(op != x || op != X);
}

int accumulate(double currentNum, double num, char op){
    switch(op){
        case '+':
            currentNum = currentNum+num;
            return currentNum;
            cout << endl;
            break;
        case '-':
            currentNum = currentNum-num;
            return currentNum;
            cout << endl;
            break;

        case '*':
            currentNum = currentNum*num;
            return currentNum;
            cout << endl;
            break;

        case '/':
            currentNum = currentNum/num;
            return currentNum;
            cout << endl;
            break;
        default:
            // If the operator is other than +, -, * or /, error message is shown
            cout << "Error! operator is not correct";
            break;
    }
}

2 个答案:

答案 0 :(得分:0)

你应该传递数字的引用来累积函数。

int accumulate(double&amp; currentNum,double&amp; num,char op);

在定义accumulate fucntion时使用相同的语法。

答案 1 :(得分:-1)

也许你应该更清楚“回归”的含义是什么。返回值并不意味着它是更改的值。这意味着如果您愿意,可以将该函数视为此值。

例如,当您编写函数时

int foo(int a)

a 加倍,然后在主函数

中使用它
int main() {
    int a = 1;
    foo(a);
    cout << a;
}

你将获得1而不是2。

但是如果你改变了行

foo(a);

a = foo(a);

你会得到2。

要更改函数内部的值,您应该通过引用或指针传递它。也就是说,定义就像

void foo(int &a)   /   void foo(int *a)