我如何计算这个作业的总报酬?

  • 本文关键字:作业 何计算 计算 c++
  • 更新时间 :
  • 英文 :


我正试图为学校写这个作业,因为学校的程序必须分别计算正常工资,加班费和总工资。我还想加入一个声明如果用户输入的数字是负数,程序会告诉用户输入的数字无效所以我添加了它但是它在& else if&quot上显示了一个错误;线。我也试图添加一个功能,它计算用户的总支付,但我不知道如何做到这一点。这是我的代码

#include <iostream>;
#include <iomanip>;
using namespace std;
int main ()
{
double hoursworked, hourlyrate, regularpay, overtimepay, totalpay;
int MIN_HOURSWORKED = 1,
MIN_HOURLYRATE = 1;



cout << "type in how many hours have you worked this week.n";
cin >> hoursworked;
cout << "type in your hourlyrate.n";
cin >> hourlyrate;
if (hoursworked < MIN_HOURSWORKED && MIN_HOURLYRATE < 0)
{
if (40 > hoursworked)
regularpay = hoursworked * hourlyrate;
cout << "your regular pay is : $ " << regularpay << endl;
else if (hoursworked > 40)
overtimepay = (hoursworked - 40) * 1.5 * hourlyrate;
cout << " your overtime pay is: $" << overtimepay << endl;
}
else
{
cout << "you entered an invalid number.";
cout << "please enter a number that is bigger than 0" << endl;

}





return 0 ;

}

以下是我所做的代码更改,注释解释了为什么

#include <iostream>
using namespace std;
int main()
{
//By initializing hoursworked and hourlyrate as negative, it ensures that the while loops used in the cin is used at least once
double hoursworked=-1, hourlyrate=-1, regularpay, overtimepay, totalpay;
int MIN_HOURSWORKED = 1,
MIN_HOURLYRATE = 1;



cout << "type in how many hours have you worked this week.n";
//Until hoursworked is positive the loop will keep running
while(hoursworked<0)
{cout<<"Enter a positive value"<<endl; cin >> hoursworked;}
//Until hourlyrate is positive the loop will keep running
cout << "type in your hourlyrate.n";
while(hourlyrate<0)
{cout<<"Enter a positive value"<<endl; cin >> hourlyrate;}
//Your previous code (hoursworked<MIN_HOURSWORKED 
//&& MIN_HOURLYRATE<0) ensures that hoursworked is lesser than 
//min_hoursworked and that min_hourlyrate is less than 0. Which 
//Im sure is not what you want to do
if (hoursworked>MIN_HOURSWORKED && hourlyrate>MIN_HOURLYRATE)
{
if (40>hoursworked)
{
regularpay = hoursworked * hourlyrate;
cout << "your regular pay is : $ " << regularpay << endl;
}
else if (hoursworked>40)
{
overtimepay = (hoursworked - 40) * 1.5 * hourlyrate;
cout << " your overtime pay is: $" << overtimepay << endl;
}
}   
else
{
cout << "you entered an invalid number.";
cout << "please enter a number that is bigger than 0" << endl;

}
return 0;
}

创建函数的方法在这里有很好的解释

也是你在if和else if中出现错误的原因,因为括号{}。作为一名新程序员,在任何地方使用{},即使看起来你不需要。这是一个很好的实践,有助于避免很多混淆

注:如果你觉得有用,请接受我的答案因为这可以帮助我获得一些声望积分

包含两个或多个语句的if子句需要使用大括号:

if ( /* condition */ )
{
statement;
statement;
...
}

省略大括号意味着只有if语句"belongs"之后的第一个语句:

if (40 > hoursworked)
regularpay = hoursworked * hourlyrate;

这是整个if陈述,没有别的了。下面几行,else if不知从哪里冒出来。你的编译器会感到困惑,并抱怨它。

最外层的if语句已经包含了这些大括号,所以您只是忘记在这里使用它们。

虽然这将解决编译错误,但结果代码仍然不能正常工作,至少有三个原因:

  1. 40完全相同的hoursworked将不满足if的任何一个条件,并且将不打印任何内容。

  2. 超过40hoursworked将不满足第一个if的条件,因此第一条消息不被打印。这似乎是一个相当明显的错误。

  3. 最外层的if条件只有在这两个条件都为真时才满足:

    if (hoursworked < MIN_HOURSWORKED && MIN_HOURLYRATE < 0)
    

如果您逐字阅读此内容,则意味着:如果以下内容均为真,则执行所有操作:hoursworked小于允许的最小值,并且每小时费率为负。因此,如果有人输入-5小时的工作时间,并且每小时的工资为-10,则满足此条件。这将被认为是有效的输入,并且if语句中的语句将被执行,否则输入将被视为无效而拒绝。

这显然也是不正确的。

因此,除了修复编译错误之外,您还需要对程序进行额外的更改,以纠正所有这些缺陷。好运。

最新更新