C++ 有空函数的问题

C++ 有空函数的问题,c++,C++,我正在尝试使用该程序显示奖金,但该程序会将答案呈现为0。我对C++非常陌生,所以任何指导都会被大大理解。 代码如下: #include <iostream> #include <iomanip> using namespace std; //function prototypes void enterItems(double, double); void calcAndDisplayBonus(double &salesAmt, double &rate

我正在尝试使用该程序显示奖金,但该程序会将答案呈现为0。我对C++非常陌生,所以任何指导都会被大大理解。

代码如下:

#include <iostream>
#include <iomanip>
using namespace std;

//function prototypes
void enterItems(double, double);
void calcAndDisplayBonus(double &salesAmt, double &rate);

int main()
{   
    //declare variables
    double sales     =  0.0;
    double bonusRate =  0.0;

   //enter input values
   enterItems(sales, bonusRate);

   //calculate and display bonus
   cout << fixed << setprecision(2);
   calcAndDisplayBonus(sales, bonusRate);

   system("pause");
   return 0;
}   //end of main function

//*****function definitions*****
void enterItems(double salesAmt, double rate)
{
    cout << "Enter sales: ";
    cin >> salesAmt;
    cout << "Enter bonus rate (in decimal form): ";
    cin >> rate;
} //end of enterItems function

void calcAndDisplayBonus(double &salesAmt, double &rate)
{
    cout << "Bonus: $" << salesAmt * rate << endl;
} //end of calcAndDisplayBonus function
你的职能

void enterItems(double salesAmt, double rate)
通过值获取两个双参数,这意味着,从外部看不到您在函数内部所做的更改。你可以参考双打:

void enterItems(double &salesAmt, double &rate)
但我更愿意返回值,但由于只能返回单个值,因此需要两个函数:

double enterSales()
{
    double tmp;
    cout << "Enter sales: ";
    cin >> tmp;
    return tmp;
}

double enterBonus()
{
    double tmp;
    cout << "Enter bonus rate (in decimal form): ";
    cin >> tmp;
    return tmp;
}

//in your main:
double sales     =  enterSales();
double bonusRate =  enterBonus();
当您调用enterItems时,您正在按副本传递参数。这意味着您的更改不会影响调用者范围内可用的变量

要解决这个问题,您可以传递几个引用或指针,也可以依赖函数返回的一对作为结果,依此类推

例如,通过编写:

void enterItems(double &salesAmt, double &rate)
您将实际解决上述问题。 另一个有效的原型是:

void enterItems(double *salesAmt, double *rate)
当然,尽管这个示例要求对代码进行一小部分更改,但仍然需要修改示例


有很多可能的解决方案,希望这些解决方案能让您了解问题所在。

请使您的标题有用。如果需要格式化,请使用printftext@stackptr在C中,您可以这样做,在C++中,使用流操作器setprecision@PatrickRobertsprintf更容易用于格式化文本。此外,它更快。@关于是否值得回到C函数以供特定性能使用用例的争论是有价值的,但在对来自C++开发人员的问题的评论中,这些问题不应该面对像使用PrtTF这样的陈述而不具备任何资格的事实。我们已经有足够的C++开发人员盲目地编写C习语了,非常感谢。实际上你可以返回多个值,但是我不会这么做。你的方法看起来很好,模缺失常数。嗯,你是对的,你可以返回一对或一些结构,但我现在想保持简单。我100%同意的一般建议是,通过改变参数返回是不明智的。