[英]How can I fix my program's calculation and get it to run properly?
我的代码没有计算。 我试了几个小时,但它仍然显示 0.00 的总税金和工会费用。 当然,它不计算总计和平均值。 我迷路了,我哪里出错了。 我回顾了很多用结构计算的例子,但我仍然找不到为什么它显示 0。
这是我的代码:
#include <iomanip>
#include <string>
using namespace std;
struct Payroll
{
string f_name, l_name;
char m_initial;
int hrs_worked;
double rate, gross, state_tax,fed_tax, union_fees,net;
};
int main()
{
int size=0, num=20;
Payroll workers[num];
double overtime, gross, fed, state, unionFees, net;
double total_gross;
cout<<"Enter the number of employees: ";// take input of number of employees
cin >> num;
//get employee's info
cout<<"Enter details of employee " <<size+1<<": "<<endl;
for (size =0; size < num; size ++)
{
//asking for user's input
cout<<"Enter first name : ";
cin >> workers[size].f_name;
cout<<"Enter middle name initial: ";
cin >> workers[size].m_initial;
cout<<"Enter last name : ";
cin >> workers[size].l_name;
cout<<"Enter hours worked : ";
cin >> workers[size].hrs_worked;
//input validation
while(workers[size].hrs_worked < 0 || workers[size].hrs_worked > 60)
{
cout<<"Error! Enter hours between 0 to 60: ";
cin >> workers[size].hrs_worked;
}
cout<<"Enter Rate per hour : ";
cin >> workers[size].rate;
// input validation
while(workers[size].rate <= 0 || workers[size].rate > 50)
{
cout<<"Error! Enter rate greater than 0 to 50: ";
cin >> workers[size].rate;
}
cout<< endl;
}
// Calculating each employee's pay
if(workers[size].hrs_worked > 40)
{
overtime = (workers[size].hrs_worked - 40) * workers[size].rate * 1.5;
workers[size].gross = (workers[size].rate * 40) + overtime;
}
gross = (workers[size].rate * workers[size].hrs_worked); // calculate gross
state = workers[size].gross * 6/100;// calculate state tax
fed = workers[size].gross * 12/100;// calculate federal tax
unionFees = workers[size].gross * 2/100;// calculate union fees
net = workers[size].gross - (workers[size].state_tax + workers[size].fed_tax + workers[size].union_fees);// calculate net
total_gross= workers[size].gross+total_gross;
// display header
cout<<"Data Housing Corp. Weekly Payroll"<<endl;
cout<<setw(8)<<"FN"<<setw(4)<<"MI"<<setw(8)<<"LN"<<setw(8)<<"Hours"<<setw(6)
<<"Rate"<<setw(8)<<"Gross"<<setw(6)<<"ST"<<setw(8)<<"FT"<<setw(8)
<<"UF"<<setw(8)<<"Net"<<endl;
cout<<setw(8)<<"==="<<setw(4)<<"==="<<setw(8)<<"==="<<setw(8)<<"===="<<setw(6)
<<"===="<<setw(8)<<"===="<<setw(6)<<"==="<<setw(8)<<"==="<<setw(8)
<<"==="<<setw(8)<<"===="<<endl;
// displaying data
for (size =0; size < num; size ++)
{
cout<<setw(8)<<workers[size].f_name<<setw(4);
cout<<workers[size].m_initial<<setw(8);
cout<<workers[size].l_name<<setw(6);
cout<<workers[size].hrs_worked<<setw(8);
cout<<fixed <<setprecision(2)<<workers[size].rate<<setw(8);
cout<<fixed <<setprecision(2)<<workers[size].gross<<setw(8);
cout<<fixed <<setprecision(2)<<state<<setw(8);
cout<<fixed <<setprecision(2)<<fed<<setw(8);
cout<<fixed <<setprecision(2)<<unionFees<<setw(8);
cout<<fixed <<setprecision(2)<<net<<endl;
}
cout<<"========== =========== ========= ============= =========== ========";
cout<<" ============ ========= =========== ========== ==========\n";
cout<<"Total gross income of all employee= $"<<total_gross<<endl;
cout<<"Average gross income of all employee= $"<<total_gross/num<<endl;
cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
return 0;
}
Enter the number of employees: 2
Enter details of employee 1:
Enter first name : laaa
Enter middle name initial: d
Enter last name : daaaa
Enter hours worked : 50
Enter Rate per hour : 10
Enter first name : rome
Enter middle name initial: s
Enter last name : italy
Enter hours worked : 40
Enter Rate per hour : 10
Data Housing Corp. Weekly Payroll
FN MI LN Hours Rate Gross ST FT UF Net
=== === === ==== ==== ==== === === === ====
laaa d daaaa 50 10.00 0.00 0.00 0.00 0.00 0.00
rome s italy 40 10.00 0.00 0.00 0.00 0.00 0.00
========== =========== ========= ============= =========== ======== ============ ========= =========== ========== ==========
Total gross income of all employee= $nan
Average gross income of all employee= $nan
~~~~~~~~~~~~~~~~~~~~~~~~~~~
您应该注意,您拥有的条件语句 (if(workers[size].hrs_worked > 40)) 不在您的 for 循环中,但您在该条件语句中使用了该循环计数器变量“size”。
一些旁注:
即使 'workers[size].hrs_worked' 属性 <= 40,您也需要初始化 'workers[size].gross'。
似乎数组不是这里的理想选择(除非您使用动态 memory 分配),因为您是在运行时初始化数组的大小。 不确定您的编译器如何允许您这样做?
'total_gross' 未初始化,但您可以在某些算术中使用它; 阐明它的用途以及其他局部变量的用途。
你应该可以从这里拿走它; 快乐编码!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.