c++ - 如何从 main 中的数组打印总计

标签 c++ arrays

#include<iostream>
#include<string>
#include<iomanip>

using namespace std;

struct EmployeeData
{
    string employeeName;
    float overtime;
    float grossPay;
    float hoursWorked;
    float hourlyRate;
    float statetaxOwed;
    float statetaxRate;
    float fedtaxOwed;
    float fedtaxRate;
    float netPay;
    float totalgp;
    float totalft;
    float totalst;
    float totalnp;
};

EmployeeData employee[4]; //array of 4 employees
void calculate_stats(EmployeeData& employee);

int main()
{
for (int i = 0; i < 4; ++i)
    {
    cout << "Please enter Employee #" << (i+1) << "'s" << " name: ";
    cin.ignore();
    getline(cin, employee[i].employeeName);
    cout << "Please enter Employee #" << (i+1) << "'s hours worked: ";
    cin >> employee[i].hoursWorked;
    cout << "Please enter Employee #" << (i+1) << "'s hourly rate: ";
    cin >> employee[i].hourlyRate;
    cout << "Please enter Employee #" << (i+1) << "'s Federal Tax Rate: ";
    cin >> employee[i].fedtaxRate;
    cout << "Please enter Employee #" << (i+1) << "'s State Tax Rate: ";
    cin >> employee[i].statetaxRate;
    cout << endl;
    }

for (int i = 0; i < 4; ++i)
    {
    calculate_stats(employee[i]);

    cout << setprecision(2) << showpoint << fixed;
    cout << "Employee #" << (i+1) << "'s name is: " << employee[i].employeeName << endl;
    cout << "Employee #" << (i+1) << "'s Gross Pay is: $" << employee[i].grossPay << endl;
    cout << "Employee #" << (i+1) << "'s Federal Taxes owed is: $" << employee[i].fedtaxOwed << endl;
    cout << "Employee #" << (i+1) << "'s State Taxes owed is: $" << employee[i].statetaxOwed << endl;
    cout << "Employee #" << (i+1) << "'s Net Pay is: $" << employee[i].netPay << endl;
    cout << endl;
    }

cout << "Total Gross Pay: " << employee[4].totalgp << endl; //here is the problem
cout << "Total Federal Tax Owed: " << employee[4].totalft<< endl;
cout << "Total State Tax Owed: " << employee[4].totalft<< endl;
cout << "Total Net Pay: " << employee[4].totalft << endl;

}

void calculate_stats(EmployeeData& employee)
{
    if (employee.hoursWorked>40) {
        employee.hoursWorked = ((employee.hoursWorked-40) * (1.5)) + 40;
    }
    else {
        employee.hoursWorked = employee.hoursWorked;
    }
    employee.grossPay = employee.hoursWorked * employee.hourlyRate;
    employee.fedtaxOwed = employee.grossPay * (employee.fedtaxRate/100);
    employee.statetaxOwed = employee.grossPay * (employee.statetaxRate/100);
    employee.netPay = (employee.grossPay - employee.fedtaxOwed- employee.statetaxOwed);
    employee.totalgp = employee.totalgp + employee.grossPay;
    employee.totalft = employee.totalft + employee.fedtaxOwed;
    employee.totalst = employee.totalst + employee.statetaxOwed;
    employee.totalnp = employee.totalnp + employee.netPay;
}

我确定将 cout block 包含在 for 循环之外,但仍在主循环中。使用计算统计并没有改变我的输出。输出给我所有 0.00...它们应该是所有 4 名员工的总计(因此,如果所有 4 名员工的总工资为 1000,则总工资应为 4000,这是我计算的总计在我的计算中:employee.totalgp = employee.totalgp + employee.grossPay;。这是输出的样子(错误显示的快照,其余工作正常)...

Total Gross Pay: 0.00
Total Federal Tax Owed: 0.00
Total State Tax Owed: 0.00
Total Net Pay: 0.00
Press any key to continue . . .

我该如何解决这个问题?谢谢!

最佳答案

值打印为零主要是由于您的运气。您的数组定义为 EmployeeData employee[4] 允许访问 employee[0]employee[3]。为打印访问 employee[4] 访问的内存超出了为数组分配的内存。

除此之外,您的代码不会在内存位置存储任何内容,这并不是一件坏事。您确实将每组数据存储在每条记录中两次:

employee.totalgp = employee.totalgp + employee.grossPay;
employee.totalft = employee.totalft + employee.fedtaxOwed;
employee.totalst = employee.totalst + employee.statetaxOwed;
employee.totalnp = employee.totalnp + employee.netPay;

calculate_stats 的每次调用都会将 global 值存储在不同的位置,从而使您尝试累积计数的尝试落空。您需要定义一个单独的 EmployeeData 实例来存储累计总数,并将值写入该对象。

一旦您有一个新的结构来存储您的总计,更改您现有的 calculate_stats 方法中的以上四行以更新全局总计结构。

关于c++ - 如何从 main 中的数组打印总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41949639/

相关文章:

c++ - 在对象数组的每个索引上调用不同的构造函数

c++ - 将列表映射到不同类型

c++ - C++ 中标识符名称的长度是否有限制?

c++ - 释放内存(如果可能)

java - 如何将一个类中的数组放入另一个类中的单个数组中?

arrays - 为什么 const char *arr 的大小大于 const char arr[]?

java - String[]数组单独取出项目

c++ - 用于分析和减少我的应用程序编译时间的 GNU 工具

c++ - 如何删除相似的引用限定成员函数之间的代码重复?

c - 将数据添加到结构内部的数组