在这个计划中,我们将计算推销员的工资和佣金。 根据售出的小部件数量,他每小时可获得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);
}
答案 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
答案 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";
//...