将最大值和平均值合并为一个新函数,该函数“返回”一组输入数字的最大值和平均值。为此使用一个功能。

#include<iostream>

using namespace std;

double maxAverage(double& max, double& average);
int main()
{

  maxAverage(max,average);

  return 0;
}

double maxAverage(double& max, double& average)
{
  double val = 0;
  double total = 0;
  double count = 0;


  cout<<"Please enter a value, or -1 when you're done."<<endl;
  cin>>val;
  while(val!=-1){
    total+=val;
    count++;
    cout<<"Please enter a value, or -1 when you're done."<<endl;
    cin>>val;
    if(val>max)
      max = val;
  }
  average = total / count;
  return average;
  return max;
}


调用函数时出现错误,我不确定目前如何解决此问题。

最佳答案

方法1:正确使用by-ref(&)参数:

您需要在呼叫站点之前声明maxaverage,并按引用传递它们:

double max = 0;
double average = 0;

maxAverage( &max, &average );


maxAverage函数不需要返回值,应将其更改为void

方法2:使用新的struct

函数何时会更容易被推论-与使用输出参数或by-ref参数相比,使用返回值更简单。考虑使用新的struct返回这些值。

struct MaxAverageResult {
    double max;
    double average;
}

int main( int argcx, char* argv* )
{
    MaxAverageResult r = maxAverage();
    cout << r.max << " " << r.average << endl;
    return 0;
}

MaxAverageResult maxAverage()
{
    // etc

    MaxAverageResult r;
    r.max = max;
    r.average = average;
    return r;
}


在C ++ 11中,使用统一初始化的语法更简单:

MaxAverageResult maxAverage()
{
    // etc

    return { max, average };
}


方法3:使用std::tuple<T1,T2>(又名std::pair<T1,T2>):

此方法与上面的方法相同,但不是使用新的struct MaxAverageResult而是使用std::pairmake_pair函数:

int main( int argcx, char* argv* )
{
    std::pair<double,double> r = maxAverage();
    cout << r.first << " " << r.second << endl;
    return 0;
}

MaxAverageResult maxAverage()
{
    // etc

    return std::make_pair( max, average );
}

关于c++ - 通过一项功能打印出最大值和平均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58584271/

10-11 18:05