C ++使用Struct进行员工记录/总薪水计算器

时间:2019-03-08 21:53:19

标签: c++ struct

对不起,我对c ++来说还比较陌生,并且目前处于困境。该应用程序的重点是让用户输入他们拥有的雇员数量,然后输入有关其雇员的信息,包括他们的工作时间和工资率。之后,该应用程序将打印出所有信息,然后给他们每个员工的总薪水。我以为我的所有设置都正确,但是在第26行出现错误,它说“表达式必须具有恒定值”。任何提示或建议,将不胜感激。

#include <iostream>
#include <conio.h>
#include <fstream>
#include <string>
#include<iomanip>

using namespace std;

struct Employee
{
    int id;
    string fName;
    string lName;
    int pay;
    int hours;
};

int main() {

    int i, n;

    cout << "Enter number of employees";
    cin >> n;

    Employee Emp[n];

    for (i = 0; i < n; i++) {

    cout << "Enter Employee ID: ";
    cin >> Emp[i].id;
    cout << "Enter First Name: ";
    cin >> Emp[i].fName;
    cout << "Enter Last Name: ";
    cin >> Emp[i].lName;
    cout << "Enter in Pay Rate: ";
    cin >> Emp[i].pay;
    cout << "Enter in Hours: ";
    cin >> Emp[i].hours;
    }

    cout << "\n*** Employee Details ***";
    cout << "ID" << setw(15) << "First Name" << setw(10) << "Last Name" << setw(10) << "Pay" << setw(10) << "Hours" << setw(10) << "Gross Pay";

    for (i = 0; i < n; i++) {
        cout << "\n" << Emp[i].id << setw(15) << Emp[i].fName << setw(10) << Emp[i].lName << setw(10) << Emp[i].pay << setw(10) << Emp[i].hours << setw(10) << Emp[i].pay*Emp[i].hours;
    }

    _getch();
    return 0;
}

2 个答案:

答案 0 :(得分:1)

Employee Emp[n];

在C / C ++中,您不能像这样声明动态大小的数组。

看到这个问题-How to create a dynamic array of integers

或者更好的是,改用std::vector

答案 1 :(得分:0)

C ++标准要求您提供编译时已知的数组大小。 因此,要获取所需的内容,您需要使用动态内存分配,即根据用户输入的n在堆上分配一个数组。下面演示了此方法。

#include <iostream>
#include <conio.h>
#include <fstream>
#include <string>
#include<iomanip>

using namespace std;

struct Employee
{
    int id;
    string fName;
    string lName;
    int pay;
    int hours;
};

int main() {

    int i, n;

    cout << "Enter number of employees";
    cin >> n;

    auto *Emp = new Employee[n];

    for (i = 0; i < n; i++) {

    cout << "Enter Employee ID: ";
    cin >> Emp[i].id;
    cout << "Enter First Name: ";
    cin >> Emp[i].fName;
    cout << "Enter Last Name: ";
    cin >> Emp[i].lName;
    cout << "Enter in Pay Rate: ";
    cin >> Emp[i].pay;
    cout << "Enter in Hours: ";
    cin >> Emp[i].hours;
    }

    cout << "\n*** Employee Details ***";
    cout << "ID" << setw(15) << "First Name" << setw(10) << "Last Name" << setw(10) << "Pay" << setw(10) << "Hours" << setw(10) << "Gross Pay";

    for (i = 0; i < n; i++) {
        cout << "\n" << Emp[i].id << setw(15) << Emp[i].fName << setw(10) << Emp[i].lName << setw(10) << Emp[i].pay << setw(10) << Emp[i].hours << setw(10) << Emp[i].pay*Emp[i].hours;
    }
    delete [] Emp;
    return 0;
}