使用if语句C ++,无法使用佣金计算工资

时间:2015-10-09 02:48:34

标签: c++ if-statement

在这个计划中,我们将计算推销员的工资和佣金。 根据售出的小部件数量,他每小时可获得10美元的佣金和佣金。 他没有收到任何钱的前50个小工具,在接下来的50个小工具(51-100)中他赚了1美元的佣金。 对于101-300他赚2美元而300+他每人赚5美元。输出应该如下(小时* 10 + 50 * 0 + 50 * 1 + 200 * 2 + 100 * 5),但我不知道如何获得。感谢您提供任何意见

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

bool error(const string & msg);

int main() {
    double hours;
    double widgets; 

    cout << "How many hours did you work this month and how many widgets did you sell? " << endl;
    cin >> hours >> widgets;
    if (!cin) error("Your input is invalid"); 
    if (hours < 0) error("Your input can't be negative"); 
    if (widgets < 0) error("Your input can't be negative"); 

    hours = (hours * 10.00); // Salesman gets paid 10$ an hour 

    if (widgets <= 50) cout << 0; // Salesman doesn't get paid for less than 50 widgets sold

    if (widgets > 50 && widgets < 101) cout << widgets * 1.00; // 51-100 Widets sold = 1$ per

    if (widgets > 100 && widgets < 301) cout << widgets * 2.00; // 101-300 sold = 2$ per

    if (widgets > 300) cout << widgets * 5.00; // anything above 300 = 5$ per 

    /* my cout should look something like 
    hours * 10 + 50*0 + 50*1 +200*2 + 100*5 
    */
    cout << hours + widgets; 
}
bool error(const string & msg) {
    cout << "Error: " << msg << endl;
    exit(EXIT_FAILURE); 
}

2 个答案:

答案 0 :(得分:1)

这可能是一项任务,所以我不会放弃答案,但希望能引导你解决错误。

如果你看一下你的逻辑并考虑一些测试输入,你就可以很容易地看出为什么它不会像写的那样工作。例如,请考虑widgets = 500

  

if (widgets <= 50) cout << 0;

widgets不等于50,因此这个逻辑不会触发。

  

if (widgets > 50 || widgets < 101) cout << widgets * 1.00;

widgets不在[51,100]范围内,所以这个逻辑不会触发,但你想在这里进行计算。对于下一个范围[101,300]也是如此。如上所述,只会触发最终逻辑(widgets > 300)。

要解决此问题,您需要在执行计算时保持运行总计。此外,您希望逻辑触发每个适用的范围。

使用widgets = 500的相同示例,您要对所有佣金范围应用计算。有很多方法可以实现这一点,但一般逻辑是:

  • 有一些widgets
  • 如果有超过50个小部件计算出有多少但不超过100,并将计算应用于总小部件的这个子集,从概念上讲,现在可能有一些剩余的小部件
  • 继续处理剩余小部件并应用适用的佣金计算,直到没有剩余的小部件(之后肯定会有剩余的小部件达到最终佣金范围,因为它所有剩余的小部件都超过了300)

答案 1 :(得分:0)

如果您希望结果是格式化的字符串,请不要进行计算。您可以使用的是字符串流。

#include <sstream>

stringstream ss;
ss << hours << " * 10 ";
//...

//at the end
cout << ss;

您也可以使用字符串,但必须将一些C代码添加到cpp代码

string cppStr;

char cstr[15];
sprintf(cstr, "%d", hours);

cppStr = cstr;
cppStr += " * 10";
//...