2016-07-11 14 views
-9

Ich habe Probleme, dies herauszufinden, um ein Netpay zur Anzeige zu bekommen. Für die Zuweisung muss ich eine externe Funktion haben. Ich behalte das:kann 'float' nicht in 'float *' für Argument '2' konvertieren

Ich bin ziemlich neu zu Codierung im Allgemeinen, so dass jede Hilfe wäre toll. Das erste Stück ist das externe und das zweite Stück in der Hauptdatei.

#define FEDTAXRATE 0.15 
#define STATETAXRATE 0.07 
#define SSITAXRATE 0.0775 

float calcFedTax(float gross, float defr); 
float calcStateTax(float fedtax); 
float calcSSITax(float gross,float defr); 
float calcNet(float gross, float *fedtax, float *statetax, float *ssitax,float defr); 
void calculateTaxes(float gross,float defr,float *fedtax,float *statetax,float *ssitax,float$ 
{ 
     *fedtax = calcFedTax(gross,defr); 
     *statetax = calcStateTax(*fedtax); 
     *ssitax = calcSSITax(gross,defr); 
     *totNet = calcNet(gross,*fedtax,*statetax,*ssitax,defr); 
} 
float calcFedTax(float gross,float defr) 
{ 
     return(gross - defr) * FEDTAXRATE; 
} 
float calcStateTax(float fedtax) 
{ 
     return fedtax * STATETAXRATE; 
} 
float calcSSITax(float gross,float defr) 
{ 
     return(gross-defr) * SSITAXRATE; 
} 
float calcNet(float gross, float *fedtax, float *statetax, float *ssitax,float defr) 
{ 
     return(gross - *fedtax - *statetax - *ssitax - defr); 
} 

#include <stdio.h> 
#include <stdlib.h> 
#define FEDTAXRATE .15 
#define STATETAXRATE .07 
#define SSITAXRATE .0775 
#define ADDR(var) &(var) 
void PrintReportHeading(FILE *reportfile); 
void getEmployeeInput(char firstname[],char lastname[],float * Reg,float * payrate,float *defr); 
float calculateGross(float Reg,float payrate); 
float calculateNet(float gross,float defr,float ft,float st,float ssit); 
extern void calculateTaxes(float gross,float defr,float *fedtax,float *statetax,float *ssitax); 
void addDetailToAccumulators(float payrate,float Ovt,float Reg,float gross,float ft,float st,float ssit, 
       float defr,float Net,float *totRate,float *totOvt,float *totReg,float *totGross,float *totFed, 
       float *totState,float *totSSI,float *totDefr,float *totNet); 
void printSummaryReport(char lastname[], char firstname[],FILE *reportfile, float payrate, float Reg, float gross, 
               float ft, float ssit, float Net, float st, float defr, float Ovt); 
int main(void) 
{ 
     char lastname[15+1]; 
    char firstname[10+1]; 
    float hours=0, payrate=0, defr=0, gross=0, ft=0, st=0, ssit=0, Ovt=0, Reg=0, Net=0, totReg=0, 
       totDefr=0, totOvt=0, totNet=0, totState=0, totRate=0, totGross=0, totFed=0, totSSI; 

     FILE * reportfile; 
    reportfile = fopen("./report.lst","wt"); 
    if (reportfile == NULL) 
    { 
     printf(" Report file open failed ...\n"); 
     while (getchar() != '\n'); 
     exit(-100); 
    } 
     PrintReportHeading(reportfile); 
     getEmployeeInput(lastname,firstname,ADDR(Reg),ADDR(payrate),ADDR(defr)); //3.3 
     gross = calculateGross(Reg,payrate); //call 3.4 
     Net = calculateNet(gross,defr,ft,st,ssit); 
     calculateTaxes(gross,defr,ADDR(ft),ADDR(st),ADDR(ssit)); 
     addDetailToAccumulators(payrate, Ovt, Reg, gross, ft, st, ssit, defr, Net, ADDR(totRate), ADDR(totOvt), ADDR(totReg), ADDR(totFed), ADDR(totFed),ADDR(totState), 
        ADDR(totSSI),ADDR(totDefr),ADDR(totNet)); 
     printSummaryReport(firstname,lastname,reportfile,payrate,Reg,gross,ft,ssit,Net,st,defr,Ovt); 
     while (getchar() != '\n'); 
     return 0; 
} 
void PrintReportHeading(FILE *reportfile) 
{ 
    fprintf(reportfile,"  Employee  Pay  RegHrs/  Gross  Fedtax  StateTax  Net\n"); 
    fprintf(reportfile,"  Name   Rate  OvtHrs  Pay  SSItax  Defr   Pay\n"); 
    fprintf(reportfile,"  ========  ======  ======  ======  ======  ========  ======\n"); 
} 
void getEmployeeInput(char *firstname,char *lastname,float *Reg,float *payrate,float *defr) 
{ 
     printf("Enter the employee's first name ===> \n"); 
     scanf("%s", firstname); 
     printf("Enter the employee's last name ===> \n"); 
     scanf("%s", lastname); 
     printf("Enter the hours worked this pay period ===> \n"); 
     scanf("%f", Reg); 
     printf("Enter the hourly payrate ===> \n"); 
     scanf("%f", payrate); 
     printf("Enter the deferred earnings ===> \n"); 
     scanf("%f", defr); 
} 
float calculateGross(float Reg,float payrate) 
{ 
     if (Reg <= 40) 
       return Reg * payrate; 
     else 
       return 40 * payrate + 1.5*payrate*(Reg-40); 
} 
void addDetailToAccumulators(float payrate,float Ovt,float Reg,float Gross,float ft,float st,float ssit, 
       float defr,float Net,float *totRate,float *totOvt,float *totReg,float *totGross,float *totFed, 
       float *totState,float *totSSI,float *totDefr,float *totNet) 
{ 
       *totRate = *totRate + payrate; 
       *totOvt = *totOvt + Ovt; 
       *totReg = *totReg + Reg; 
       *totGross = *totGross + Gross; 
       *totFed = *totFed + ft; 
       *totState = *totState + st; 
       *totSSI = *totSSI + ssit; 
       *totDefr = *totDefr + defr; 
       *totNet = *totNet + Net; 
} 
void printSummaryReport(char firstname[], char lastname[], FILE *reportfile, float payrate, float Reg, float gross, 
               float ft, float st, float Ovt, float ssit, float defr, float Net) 
{ 
     fprintf(reportfile,"%10s,%7s%8.2f%12.2f%12.2f%12.2f%12.2f%12.2f \n",firstname,lastname,payrate,Reg,gross,ft,st,Net); 
     fprintf(reportfile,"             %8.2f%17.2f \n",ssit,defr); 
} 
+0

Können Sie entscheiden, ob es sich hierbei um C oder C++ sein. Ich denke, es ist C. – nvoigt

+0

Wenn Sie den Unterschied der Typen 'float' und' float * 'nicht kennen, oder was ein Zeiger ist, sollten Sie ein C++ Buch lesen. –

+0

Warum verwenden Sie unnötigerweise so viele Zeiger? In 'calcNet'' fedtax' sind 'statetax' und' ssitax' Zeiger, aber es gibt keinen Vorteil gegenüber der Wertübergabe. – Alden

Antwort

2

Der Fehler ist selbsterklärend. Sie passieren float Werte, bei denen die calcNet() Funktion erwartet wird float* Zeiger statt

Ihre fedtax, statetax und ssitax Parameter sind bereits float* Zeiger zu beginnen, so geben sie nicht nur, wie sie ist, nicht verfolgen sie, wenn sie vorbei zu calcNet(). IOW, ändern diese:

*totNet = calcNet(gross,*fedtax,*statetax,*ssitax,defr); 

dazu:

*totNet = calcNet(gross,fedtax,statetax,ssitax,defr); 
+0

ich habe es zu laufen, aber es ist noch nicht Ausgabe der Netpay –

+1

Das sollte als eine neue Frage dann gebucht werden. Diese Frage bezieht sich auf einen Compilerfehler, der behoben wurde. Wenn sich Ihr Code beim Ausführen nicht korrekt verhält, stellen Sie eine neue Frage dazu. –