gpt4 book ai didi

c - 从函数返回结构的不同值

转载 作者:太空宇宙 更新时间:2023-11-04 02:24:08 25 4
gpt4 key购买 nike

我想在一个具有动态结构数组的函数中为每个销售人员设置佣金。如果销售人员的销售额超过 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;
}
}


}

Console output

最佳答案

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 指针。如果您的 could 不打算更改它,您应该始终将指针(尤其是在函数参数中)声明为 const

关于c - 从函数返回结构的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53514032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com