【发布时间】:2015-10-10 01:16:01
【问题描述】:
我还在学习,但是...我不认为这些功能:
void CalculateGross(float hours, float payrate, float *gross) //3.4
float CalculateGross(float hours, float payrate) //3.4
做同样的事情。那么哪种做法更好呢?我假设 void 更好?
/*
3.0 Payroll Application
3.1 PrintReportHeadings(inout reportFile as file)
3.2 InitializeAccumulators(out totreg, totovt,totpayrate,totgross,totfed,
totstate,totssi,totdefr, totnet as real)
3.3 InputEmployeeData(out lastname, firstname as string,
out hours, payrate, defr as real)
3.4 CalculateGross(in hours, payrate as real, out gross as real)
3.5 computeTaxes(in g,d as real, out ft, st, ssit as real)
3.5.1 cFed(in g,d as real, out fed as real)
3.5.2 cState(in ft as real,out state as real)
3.5.3 cSSI(in g,d as real, out ssi as real)
3.7 PrintSummaryReport( ......)
3.7.1 printTotals( ....)
3.7.2 printAverages( ....)
*/
#include <stdio.h>
#include "TAXRATES.h"
void InputEmployeeData(char *lastname,char *firstname, // 3.3
float *hours,float *payrate, float *defr);
void CalculateGross(float hours, float payrate, float * gross); //3.4
float CalculateGross(float hours,float payrate); //3.4
extern void computeTaxes(float g,float d,float * ft,float *st,float *ssit); //3.5
int main(void)
{
char ln[15+1];
char fn[10+1];
float fed,state,ssi;
float g,h,p,d,n;
InputEmployeeData(&ln[0],&fn[0],&h,&p,&d); // call 3.3
g = CalculateGross(h,p); // call 3.4
// vs
//CalculateGross(40.00,25.00,&g); // alternate call 3.4
computeTaxes(g,d,ADDR(fed),ADDR(state),ADDR(ssi)); // call 3.5
n = g-fed-state-ssi-d;
printf(" Fed = %8.2f\n",fed);
printf(" State = %8.2f\n",state);
printf(" SSI = %8.2f\n",ssi);
printf(" Net = %8.2f\n",n);
while(getchar() != '\n'); // flush(stdin)
return 0;
}
void CalculateGross(float hours, float payrate, float * gross) //3.4
{
if (hours <= 40)
*gross = hours * payrate;
else
*gross = 40* payrate + 1.5 * payrate * (hours-40);
}
float CalculateGross(float hours,float payrate) .. //3.4
{
if (hours <= 40)
return hours * payrate;
else
return 40* payrate + 1.5 * payrate * (hours-40);
}
void InputEmployeeData(char *lastname,char *firstname, // 3.3
float *hours,float *payrate, float *defr)
{
printf(" Enter the name ==> ");
scanf("%s%s",firstname,lastname);
printf(" Enter the hours and payrate ==> ");
scanf("%f%f",hours,payrate);
printf(" Enter the deferred earning amount ==> ");
scanf("%f",defr);
}
【问题讨论】:
-
为什么你认为
void版本更好?总的来说,我认为返回值的版本比使用指针的版本更简单,但这完全取决于情况。