c++ - 将数组相加的函数

标签 c++

我快完成了,但我很难思考如何从文件中将数字加到数组中。我希望它作为用户定义的函数。我已经通过预定义的方法完成了它,但我想知道如何创建一个函数来完成这项工作。

#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <stdlib.h>
using namespace std;

const int OCCUPATION_MAX = 10;
void sort(string occupation[], double salary[]);
void sum(double salary[], double sum, int index);
double calc(double avgSalary, double medSalary);

int main()
{   
  string occupation[OCCUPATION_MAX];    //array of type string for the occupation names
  double salary[OCCUPATION_MAX];
  ifstream input;
  ofstream output;
  int index = 0;
  double sum = 0;
  string fname;
  double average;
  double median;

  //Intro
  cout << "Welcome to this program.\n";
  cout << "Please enter text file you want to use.\n";
  cin >> fname;
  //opening file of correct
  input.open(fname.c_str());

  if(input.fail())
  {
    cout << "Not a valid filename\n";
    exit(0);
  }

  //If input file exists, read all records from file
  while (input >> occupation[index])
  {
    input >> salary[index];
    sum = sum + salary[index];
    index++;
  }
  //Close input file
  input.close();

  //Call function to sort arrays in descending order by salary
  sort(occupation, salary);

  //Call function to calculate average and median of salaries
  double calc(double sum, double salary[], double& average, double& median);

  //Open output file, remember to look at output.txt for the result)
  output.open("output.txt");

  //Write file to output
  output << setw(15) << "OCCUPATION" << setw(15)<< "SALARY" << endl;
  output << "------------------------------------" << endl;
  for (index = 0; index<OCCUPATION_MAX; index++)
  {
    output << setw(15) << occupation[index] << setw(10) <<setprecision(2) << fixed << "$ " << salary[index] << endl;
  }
  output << endl << setw(15) << "Average Salary" << setw(10) <<setprecision(2) << fixed << "$ " << average << endl;
  output << setw(15) << "Median Salary" << setw(10) <<setprecision(2) << fixed << "$ " << median << endl;

  //Close output file
  output.close();

  return 0;
}

//Function to sort both arrays in descending order by salary
void sort(string occupation[], double salary[])
{
  for (int i=0; i<OCCUPATION_MAX; i++)
  {
    for (int j=i+1; j<OCCUPATION_MAX; j++)
    {
      if (salary[i] < salary[j])
      {
        //Swap salary
        double temp = salary[i];
        salary[i] = salary[j];
        salary[j] = temp;

        //Swap occupations
        string t = occupation[i];
        occupation[i] = occupation[j];
        occupation[j] = t;
      }
    }
  }
}
void sum(double salary[], double sum, index=0)
double salary;
double sum=0;
int index=0;
{
 while(!eof)
 {
    output >> salary[index];
    sum = sum + salary[index];
    index++;
  }
}
//Function to calculate average and median
double calc(double sum, double salary[], double& average, double& median)
{
  //Calculate average of occupations
  average = sum / salary[OCCUPATION_MAX];

  //Calculate median of occupations
  median = (salary[OCCUPATION_MAX/2] + salary[(OCCUPATION_MAX-1)/2])/2;
}

到目前为止,我被告知取消引用我的指针。

void sum(double salary[], double sum, index=0)
    double salary;
    double sum=0;
    int index=0;
    {
     while(!eof)
     {
        output >> salary[index];
        sum = sum + salary[index];
        index++;
      }
    }

最佳答案

抱歉,我无法处理您的 sum 中的错误功能:
避免旧的函数声明并使用现代声明:

void sum(std::istream&        input_file,
         std::vector<double>& salary,
         double &             sum,
         unsigned int&        values_read);

正确阅读:

{
  double salary_read = 0.0;
  sum = 0.0;
  while (input_file >> salary_read)
  {
      salary.push_back(salary_read);
      sum += salary_read;
      ++values_read;
  }
}

函数应该只有一个目的
输入和求和是两个独立的函数。
数据输入后即可求和。
分离功能允许您使用一个功能输入数据并将数据用于另一个目的,而无需每次都计算总和。

查看输入迭代器
输入迭代器将允许您告诉编译器生成更有效的代码来从输入流中读取文件。

std::vector给你元素的数量
您不必统计读入的元素数量。
如果你使用 std::vector , 你使用 size方法来获取值的数量。

简化的函数 是的,可以使用 <algorithm> 中的工具将函数编写得更紧凑,但这些说明了基本概念。

std::istream& input_salaries(std::vector<double>& salaries,
                            std::istream& input_file)
{
  double value_from_file = 0.0;
  while (input_file >> value_from_file)
  {
    salaries.push_back(value_from_file);
  }
  return input_file;  // So this function can be "chained"
}

double sum(const std::vector<double>& salaries)
{
  double sum = 0.0;
  const unsigned int number_of_salaries = salaries.size();
  for (unsigned int i = 0; i < number_of_salaries; ++i)
  {
    sum += salaries[i];
  }
  return sum;
}

关于c++ - 将数组相加的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20574885/

相关文章:

c++ - 构造一个包含二进制数组的 hexValue 的字符串

c++ - 将Qt集成到现有VS项目中以替换WinAPI

c++ - 在 C++ 中查找等于数组的值

c++ - 如何调用作为模板参数传递给类的标准函数?

c++ - x86_64-w64-mingw32-g++ 编译失败,g++ 工作正常

c++ - 跟随另一个旋转的物体

c++ - 根据成员容器的大小专门化成员函数

c++ - Process Explorer 使用哪个 winapi 函数来挂起进程?

如果成员存在,C++ 设置值

C++ 错误无法为 char g[] 的数组指定显式初始值设定项