我需要在文件中取一个未知数量的整数并将它们存储到一个向量中,从最大到最小排序并找到最小和最大数的调和平均值。然后我需要将文件中的平均值和所有数字输出到一个新文件中。我创建了一个完全适用于小于10的整数的代码,但是它将数字作为字符串输入到向量中,我需要重写代码以将整个文件的行输入为整数但是会出错。它不会向" AverageFile"输出任何内容。加载后程序将崩溃。它给出了错误
"在抛出' std :: bad_alloc'的实例后终止调用what():std :: bad_alloc"
我的代码如下,我认为问题在于向量的输入或输出。
#include <iostream>
#include <fstream>
#include <string>
#include<stdlib.h>
#include<vector>
using namespace std;
int main()
{
int line;
vector<int> score;
int i=0;
//double sum=0;
//double avg;
int temp=0;
string x;
cin>>x;
ifstream feederfile(x.c_str());
if(feederfile.is_open())
{
while(feederfile.good())
{
score.push_back(line);
i++;
}
feederfile.close();
}
else cout<<"Unable to open Source file";
//Sorting from greatest to least:
for(int i=0;i<score.size()-1;i++)
{
for(int k=i;k<score.size();k++)
{
if(score[i]<score[k])
{
temp=score[i];
score[i]=score[k];
score[k]=temp;
}
}
}
int a=score[score.size()-1];
int b=score[0];
double abh=2/(1/double (a)+1/double (b));
ofstream myfile ("AverageFile.txt");
if(myfile.is_open())
{
myfile<<"The Harmonic Mean is: "<<abh<<endl;
myfile<<"Sorted Numbers: ";
for(int i=0;i<score.size();i++)
{
if(i<score.size()-1)
{
myfile<<score[i]<<", ";
}
else{myfile<<score[i];}
}
myfile.close();
}
else cout<<"Unable to open Export file";
return 0;
}
答案 0 :(得分:4)
你忘了从文件中读取。在
while(feederfile.good()){
score.push_back(line);
i++;
}
你永远不会从文件中读取所以你有一个无限循环,因为文件总是good()
,并且最终你的内存耗尽,试图将对象添加到向量中。
使用feederfile.good()
is not what you want to use for your condition。相反,您希望将读取操作设置为循环条件。所以,如果我们这样做,那么我们有
while(feederfile >> line){
score.push_back(line);
i++;
}
在遇到错误或文件结束之前会先阅读。