2014-07-21 34 views
0

我必須編寫一個程序來計算10名員工總工資,扣除額,淨工資,並在適用的情況下包括加班費。我必須使用一個結構來執行此操作,名稱最多可以包含20個字符,ID爲6個字符。我知道我的主要問題是我如何在我的結構中使用數組,因爲我只有一名員工可以正常工作。也許我只是不瞭解如何在結構中正確實施它們。我試圖用另一種結構嵌套它,包括我的名字[21]和別針[7],並且更多地作爲一個字符串,以及其他一些在我腦海中聽起來可行的東西,但沒有任何工作正常。任何幫助表示讚賞,並溫柔我是新的在這個大聲笑。先謝謝你。使用char字符串和數組結構的C程序

#include <stdio.h> 
#include <stdlib.h> 

#define MAX 10 

struct payroll 
{ 
char name [MAX][21]; 
char pin [MAX][7]; 
float hours[MAX]; 
float hourly_pay[MAX]; 
float gross_pay[MAX]; 
float net_pay[MAX]; 
float overtime_pay[MAX]; 
float deductions[MAX]; 
}; 

typedef struct payroll PAYROLL; 

void funcoutput (PAYROLL); 

int main() 
{ 
PAYROLL employee; 
int i; 

for (i=0;i<=MAX;i++) 
{ 
    printf ("Enter the employees last name:\n"); 
    scanf("%s", &employee.name[i]); 

    printf ("Enter the employees 6 character ID:\n"); 
    scanf("%s", &employee.pin[i]); 

    printf ("Enter the employees hours for the week:\n"); 
    scanf ("%f", &employee.hours[i]); 

    printf ("Enter the employees hourly rate of pay: \n"); 
    scanf ("%f", &employee.hourly_pay[i]); 

    printf ("Enter any employee ovetime hours, hours exceeding 40: \n"); 
    scanf ("%f", &employee.overtime_pay[i]); 

    employee.overtime_pay[i] = employee.overtime_pay[i] * 1.5; 
    employee.gross_pay[i] = employee.hours[i] + employee.hourly_pay[i] +  employee.overtime_pay[i]; 
    employee.deductions[i] = employee.gross_pay[i] * .25; 
    employee.net_pay[i] = employee.gross_pay[i] - employee.deductions[i]; 
} 

funcoutput (employee); 

return 0; 
} 

void funcoutput (PAYROLL employee1) 
{ 
    int i; 

    for (i=0;i<MAX;i++) 
    { 
    printf("Name:%s ID:%s Hours:%8.2f Hourly rate:$%8.2f Gross pay:$%8.2f Deductions:$%8.2f Net pay:$%8.2f\n", 
     employee1.name[i],employee1.pin[i],employee1.hours[i],employee1.hourly_pay[i], 
     employee1.gross_pay[i],employee1.deductions[i],employee1.net_pay[i]); 
    } 

return; 
} 
+4

解開另一個方向。創建一個包含** a ** payroll實體的結構體(在此聲明中,「MAX'出現*無處*),然後創建一個* MAX *長度的數組*。 'PAYROLL emp [MAX];'換句話說,不要對數組成員使用結構體(名稱和引腳不能承受);使用一個結構數組。那有意義嗎? – WhozCraig

+1

您在第一個循環中犯了一個錯字。用'<'替換'<='。 – McLovin

+0

我的確最終找出了回到我以前的嘗試,並認識到我的語句不匹配一個是<= MAX其他是

回答

3

您希望結構代表僱員的單個實例,然後擁有這些結構的數組。所以,你的類型定義是

#include <stdio.h> 
#include <stdlib.h> 

#define MAX 10 

typedef struct PAYROLL 
{ 
char name [21]; 
char pin [7]; 
float hours; 
float hourly_pay; 
float gross_pay; 
float net_pay; 
float overtime_pay; 
float deductions; 
} payroll; 

而且你的主函數中,然後改變你的變量聲明

PAYROLL employee[MAX]; 

,只要您有employee.<field_name>[i]你將其更改爲employee[i].<field_name>

最後,你將不得不改變funcoutput的定義

void funcoutput (PAYROLL employee1[])