2016-07-11 4 views
-9

これを計算して表示するには問題があります。割り当てのために私は外部機能を持たなければなりません。私はこれを守っている:'float'を 'float *'に変換することはできません。

私はかなり一般的なコーディングに新しいので、どんな助けも素晴らしいだろう。最初の部分は、メインファイルの外部と2番目の部分です。

#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

あなたは、これはCまたはC++であるために仮定されているかどうかを決めることができIOWは、これを変更します。私はそれがCだと思います。 – nvoigt

+0

'float'と' float * '型の違いやポインタが何であるか分からないなら、C++の本を読むべきです。 –

+0

なぜあなたは非常に多くのポインタを不必要に使用していますか? 'calcNet'' fedtax'、' statetax'、および 'ssitax'はポインタですが、値渡しの利点はありません。 – Alden

答えて

2

エラーは自明です。それらを渡すときは、calcNet()機能がfloat*ポインタの代わりに

あなたfedtaxstatetax、およびssitaxパラメータはすでに、で始まる - であるようにちょうどそれらを渡すためにfloat*のポインタであるが、それらを逆参照しません期待されているfloat値を渡しています〜calcNet()。これに

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

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

iveは稼動させましたが、まだネットペイを出力していません –

+1

それは新しい質問として投稿する必要があります。この質問はコンパイルエラーです。実行時にコードが正しく動作しない場合は、新しい質問をしてください。 –

関連する問題