【问题标题】:Value always being returned as zero?值总是返回为零?
【发布时间】:2018-04-08 15:18:18
【问题描述】:

我必须编写一个循环来执行一些数学函数并在你进行时累积答案。但是由于某种原因,我的返回值 currentNum 一直被返回为 0。我尝试在 switch 语句中将 currentNum 声明为某个 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;
    }
}

【问题讨论】:

  • 将签名改为引用currentNumint accumulate(double&amp; currentNum, double num, char op){
  • @user0042 感谢回复,请问&或*会做什么?
  • currentNum 是一个double,而你的函数返回一个int
  • 你应该把返回的值赋给currentNum
  • 你也应该初始化你的变量。

标签: c++ loops return do-while


【解决方案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)

【讨论】:

    【解决方案2】:

    你应该将数字的引用传递给累加函数。

    int 累加(double & currentNum, double & num, char op);

    在定义累加函数时使用相同的语法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多