2015-05-04 59 views
0

一直試圖弄清楚如何將信息輸入到數組中並將其從結構化變量中輸出。我可以在不使用數組的情況下輕鬆輸入和輸出信息,但是我想要從鍵盤輸入一個工作列表。我也需要計算每個工人的工資,但如果我只能從前三個變量中弄清楚簡單信息的格式,我可以自己計算出這部分工資。我試圖調用數組中的輸入函數,但沒有成功,所以我只是刪除它並離開了函數。將結構信息輸入到數組

#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]); 
    } 
} 

+0

您是否試圖將輸入信息存儲在結構數組中? –

+0

我必須編寫四個函數來創建一個工作者結構數組。 1.一個輸入工結構的陣列 2.一個 3.一個輸出工結構的陣列 4.一個計數數圖中獲得用於每個工人 結構陣列中的的加班工人。通過函數調用返回答案 –

+0

不清楚你在問什麼。請考慮提出問題併發布[mvce](http://stackoverflow.com/help/mcve) – user463035818

回答

0

你幾乎沒有。這聽起來像課程,所以我不會建議使用std :: vector。順便查找一下std :: vector,並儘可能地使用它。它會爲你節省很多的痛苦。

要使用數組,首先需要知道數組的大小和預留空間。有許多的方式來獲得工人的數量,但是這可能是最簡單的:

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; 
} 
0

好了,所以如果我理解正確,你希望能在信息讀了一堆工人並存入結構數組。如果我錯了,糾正我的錯誤,但如果這是你想要做的事情,我認爲你可以使用像這樣的單個工作人員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。你要修改它不能是const的數組。我在「Enter the blah」後添加了一些空格,以便看起來更漂亮。你可以像你說的那樣自己計算出calc,只需按照這裏的表格來弄清楚如何做一些事情。一旦你寫了一個單一的人的功能,你可以看到,爲陣列做這件事很簡單。

此外,爲了您的教育,請記住,數組本身通過引用傳遞,所以這就是爲什麼我們可以將它們引入通過引用函數而沒有任何問題。

我要補充的是,在未來,你可以通過使用訪問直接從陣列中的每個工人的信息部分:

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

感謝您的快速響應。我沒有意識到我在那個輸入函數上有這個常量。然而,這些函數肯定會滿足我的目的,而且我對這個問題感到啞巴,但我無法弄清楚如何在主驅動程序中調用該函數。我將用我正在使用的呼叫編輯我的程序。 –

0

謝謝大家的幫忙!我終於明白了,它運作良好。

#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]); 
    } 
} 

+0

不太清楚答案的目的是什麼。無論如何,你仍然需要'void calc(Worker arr [],int howMany)'函數,並且可能應該在輸入函數之後調用calc。您還可以通過將'main()'放在文件底部並將所有其他函數放在第一次使用之上來消除需要維護前向聲明貧民區的需要。 – user4581301