我想为一个具有动态结构数组的函数中的每个销售人员设置一个佣金。如果一个销售人员的销售额超过x美元,那么你有9%的佣金;如果这个销售人员的销售额低于x美元,那么你有5%的佣金。
我们假设是四号,那么每人有四份佣金
我想展示四种不同的数量。

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;
        }
    }


}

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

最佳答案

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)来消除这种开销。
还请注意,我将sales数组输入更改为const指针。
如果could的片段不打算更改指针,则应该始终将指针(尤其是在函数参数中)声明为const

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

10-12 22:28
查看更多