我想为具有动态结构数组的函数中的每个销售人员设置佣金。如果推销员的销售额超过x美元,则您的佣金为9%;如果推销员的销售额少于x美元,则您的佣金为5%。
让我们说规模是四个,那么每个人将有4个单独的佣金 我想显示四个不同的金额。
double commissionCal(struct Sale *arrSale, int size)
{
double commission, total;
for (int x = 0; x < size; x++)
{
if (arrSale[x].saleAmount > 2000.00)
{
commission = arrSale[x].saleAmount * .09; //sets commission
total = arrSale[x].saleAmount + commission; // adds commission to sale amount
return total; // I know by adding return total will end the function
}
else
{
commission = arrSale[x].saleAmount * .05;
total = arrSale[x].saleAmount + commission;
return total;
}
}
}
答案 0 :(得分:2)
在c
中,一个函数不能通过返回值返回多个值。
您在这里有两个选择:
选项1:将指向结果变量的指针作为参数接收它的输出
void commissionCal(const struct Sale *i_arrSale, int i_size, double * o_total, double *o_commision)
{
*o_total= 0.;
*o_commission= 0.;
// ...
}
// later in your program:
double total;
double commission;
commissionCal(monthlysales, salescount, &total, &commission);
printf("total: %f commission: %f", total, commission);
选项2:定义结构并将其用作返回类型
struct SaleResults{
double total;
double commission;
}
struct SaleResults commissionCal(const struct Sale *i_arrSale, int i_size)
{
SaleResults results;
results.total = 0.;
results.commission = 0.;
// ...
return results
}
// later in your program:
struct SaleResults results = commissionCal(monthlysales, salescount);
printf("total: %f commission: %f", results.total, results.commission);
仅当您返回的数据结构相对较小(只是一堆值)时,才应使用此选项,因为在对接收变量的赋值返回后会进行复制。但是,现代编译器通常采用返回值优化(RVO)来消除这种开销。
还请注意,我将销售数组输入更改为const
指针。
如果您不希望更改指针,则应始终将指针(尤其是在函数参数中)声明为const
。