如何阻止代码计算两次

时间:2014-07-22 04:21:53

标签: c++

我的代码假设计算工资的5%和工资的10%。在编制时,结果是5%的计算权,但我认为10%是在10%的基础上增加5%。我该如何解决这个问题?

#include <cstdlib>

#include <iostream>

using namespace std;

void fivePercentRaise(double &);

void tenPercentRaise(double &);

int main()

{

double salary = 0.0;
cout << "Please enter current salary: ";

cin >> salary;

fivePercentRaise(salary);

tenPercentRaise(salary);

system("pause");

return 0;

}

void fivePercentRaise(double & sal)

{

sal = sal * 0.05 + sal;

cout << "New salary if you receive a 5% raise: " << sal << endl;

}

void tenPercentRaise(double & sal)

{

sal =  sal * 0.10 + sal;

cout << "New salary if you receive a 10% raise: " << sal << endl;

}

4 个答案:

答案 0 :(得分:3)

您的代码是:

fivePercentRaise(salary);
tenPercentRaise(salary);

这些功能通过引用salary并在原地修改它来工作。所以你确实计算了5%的加注,然后计算了10%加注(复合)。

您有几个选择:

  • 在调用salary之前保存fivePercentRaise的值,然后将其还原
  • 按值获取参数,并返回更新后的值
  • 按值继承参数,不返回任何内容,因为你不使用函数外的值

更常规的设计是你的函数执行加注,然后调用代码执行输出。如果你想在另一个你不想打印发生的事情的场景中应用5%加注,你就不需要修改这个功能。

答案 1 :(得分:1)

你按顺序加注两次。

假设100美元薪水:

5%提高:105

10%上调(105):115.50

答案 2 :(得分:1)

问题的原因是函数声明:

void tenPercentRaise(double & sal)

当您使用&的引用时,您将修改用于调用该函数的变量。

请阅读&#34;通过参考&#34;并且&#34;传递价值。&#34;理解这种区别,修复功能应该很简单。

答案 3 :(得分:0)

问题在于,您要告诉您的功能(&#39; fivePercentRaise()&#39; tenPercentRaise()&#39;)通过引用获取输入变量,工资而不是价值。当你告诉函数通过引用获取变量时,&#39; fivePercentRaise()&#39;会提高存储在价值&#39;工资中的价值。减少5%。然后你将同一个变量传递给&#39; tenPercentRaise()&#39;谁高兴地提高同样的薪水&#39;变量为10%。

删除预处理器指令和函数定义中的&符号。