将信息从结构输入到数组

Inputing info from a structure to an array

一直在尝试弄清楚如何将信息输入数组并从结构化变量中输出。我可以在不使用数组的情况下轻松输入和输出信息,但是我正在尝试从键盘输入工作人员列表。我还需要计算每个工人的工资,但如果我能从前三个变量中找出简单信息的格式,我就可以自己弄清楚这部分。我试图调用数组中的输入函数但没有成功所以我只是删除它并保留函数。

</p> <pre><code> #include<iostream> using namespace std; struct Worker { int idNumber; int hoursWorked; double hourlyRate; double earned; }; void input(Worker & theData); //Postcondition: theData.idNumber, theData.hoursWorked, and theData.hourlyRate are given input values // the user must input into these values. void print(const Worker &); void input(Worker[], int howMany); void print(const Worker[], int); void main() { Worker arr[10]; Worker Data; input(Data); print(Data); input(arr[10],7); system("pause"); } void input(Worker& theData) { cout << "Enter the Employee idNumber "; cin >> theData.idNumber; cout << "Enter the Hours Worked. "; cin >> theData.hoursWorked; cout << "Enter the HoutlyRate for under 41 hours. "; cin >> theData.hourlyRate; } void input(Worker arr[], int howMany) { for (int i = 0; i < howMany; i++) { input(arr[i]); } } void print(const Worker& w) { cout << w.idNumber << "\n" << w.hoursWorked << "\n" << w.hourlyRate << "\n" << w.earned << endl; } void print(const Worker arr[], int howMany) { for (int i = 0; i < howMany; i++) { print(arr[i]); } }

好的,如果我对您的理解是正确的,您希望能够读取有关一群工人的信息并将其存储到一个结构数组中。如果我错了,请纠正我,但如果那是你想做的,我认为你实际上可以使用单个 worker input 函数来稍微作弊。

struct Worker
{
    int idNumber;
    int hoursWorked;
    double hourlyRate;
    double earned;
};

void input(Worker& theData) {
    cout << "Enter the Employee idNumber ";
    cin >> theData.idNumber;
    cout << "Enter the Hours Worked. ";
    cin >> theData.hoursWorked;
    cout << "Enter the HoutlyRate for under 41 hours. ";
    cin >> theData.hourlyRate;
}

void input(Worker arr[], int howMany)
{
    for (int i = 0; i < howMany; i++)
    {
        input(arr[i]);
    }
}

void print(const Worker& w) {
    cout << w.idNumber << "\n" << w.hoursWorked << "\n" << w.hourlyRate << "\n" << w.earned << endl;
}

void print(const Worker arr[], int howMany)
{
    for (int i = 0; i < howMany; i++)
    {
        print(arr[i]);
    }
}

一些注意事项,你想从数组输入函数中删除const。您将要修改的数组不能是常量。我在 "Enter the blah. " 后面加了一些空格,这样看起来更漂亮。你可以像你说的那样自己计算出计算,只需按照这里的表格来计算如何对一系列的东西进行计算。为单个人编写函数后,如您所见,为数组编写函数非常简单。

另外,为了您的教育,请记住数组本质上是按引用传递的,因此我们可以毫无问题地将它们放入按引用传递函数中。

我应该补充一点,将来您可以使用以下方法直接从数组中访问每个工人信息的各个部分:

arr[i].idNumber;
arr[i].any_struct_variable;

你快到了。这听起来像是课程作业,所以我不建议使用 std::vector。顺便查查std::vector,有空就用。它会让你省去很多痛苦。

要使用数组,首先需要知道数组的大小并预留space。有很多方法可以获取工人的数量,但这可能是最简单的:

int main()
{
    int howMany;
    cout << "How many?";
    cin >> howMany;

    Worker * workers = new Worker[howMany];

之后,基本上就是继续做您正在做的事情,但是调用基于数组的函数并在完成后进行清理。

    input(workers, howMany);
    calc(workers, howMany);
    print(workers, howMany);
    system("pause");
    delete[] workers;
}

谢谢大家的帮助!我终于弄明白了,而且效果很好。

</p> <pre><code> #include<iostream> using namespace std; struct Worker { int idNumber; int hoursWorked; double hourlyRate; double earned; }; void input(Worker & theData); //Postcondition: theData.idNumber, theData.hoursWorked, and theData.hourlyRate are given input values // the user must input into these values. void print(const Worker &); void calcInput(Worker[], int howMany); void input(Worker[], int howMany); void print(const Worker[], int); void calc(Worker & theWage); void main() { Worker Data; int howMany; cout << "How many?"; cin >> howMany; Worker * workers = new Worker[howMany]; input(workers, howMany); calcInput(workers, howMany); print(workers, howMany); system("pause"); delete[] workers; } void input(Worker& theData) { cout << "Enter the Employee idNumber "; cin >> theData.idNumber; cout << "Enter the Hours Worked. "; cin >> theData.hoursWorked; cout << "Enter the HoutlyRate for under 41 hours. "; cin >> theData.hourlyRate; } void input(Worker arr[], int howMany) { for (int i = 0; i < howMany; i++) { input(arr[i]); } } void print(const Worker& w) { cout << w.idNumber << "\n" << w.hoursWorked << "\n" << w.hourlyRate << "\n" << w.earned << endl; } void print(const Worker arr[], int howMany) { for (int i = 0; i < howMany; i++) { print(arr[i]); } } void calc(Worker & theWage) { if (theWage.hoursWorked <= 40) { theWage.earned = theWage.hoursWorked * theWage.hourlyRate; } else { int basePay; basePay = theWage.hoursWorked * theWage.hourlyRate; theWage.earned = (theWage.hoursWorked - 40) * 1.5 + basePay; } } void calcInput(Worker arr[], int howMany) { for (int i = 0; i < howMany; i++) { calc(arr[i]); } }