我正试图为学校写这个作业,因为学校的程序必须分别计算正常工资,加班费和总工资。我还想加入一个声明如果用户输入的数字是负数,程序会告诉用户输入的数字无效所以我添加了它但是它在& else if"上显示了一个错误;线。我也试图添加一个功能,它计算用户的总支付,但我不知道如何做到这一点。这是我的代码
#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
语句已经包含了这些大括号,所以您只是忘记在这里使用它们。
虽然这将解决编译错误,但结果代码仍然不能正常工作,至少有三个原因:
与
40
完全相同的hoursworked
将不满足if
的任何一个条件,并且将不打印任何内容。超过
40
的hoursworked
将不满足第一个if
的条件,因此第一条消息不被打印。这似乎是一个相当明显的错误。最外层的
if
条件只有在这两个条件都为真时才满足:if (hoursworked < MIN_HOURSWORKED && MIN_HOURLYRATE < 0)
如果您逐字阅读此内容,则意味着:如果以下内容均为真,则执行所有操作:hoursworked
小于允许的最小值,并且每小时费率为负。因此,如果有人输入-5小时的工作时间,并且每小时的工资为-10,则满足此条件。这将被认为是有效的输入,并且if
语句中的语句将被执行,否则输入将被视为无效而拒绝。
这显然也是不正确的。
因此,除了修复编译错误之外,您还需要对程序进行额外的更改,以纠正所有这些缺陷。好运。