有void函数的问题

时间:2016-01-14 23:14:07

标签: c++

我正在尝试使用该程序来显示奖金,但程序会给出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

2 个答案:

答案 0 :(得分:1)

你的功能

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();

答案 1 :(得分:1)

当您致电enterItems时,您将按副本传递参数。这意味着您的更改不会影响调用者范围内可用的变量。

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

举个例子,写一下:

void enterItems(double &salesAmt, double &rate)

您实际上已经解决了上述问题 另一个有效的原型是:

void enterItems(double *salesAmt, double *rate)

即使这个代码要求您的代码周围进行一小组更改(当然也是示例)。

有很多可能的解决方案,希望这些解决方案可以让您了解错误。