2017-04-24 17 views
0

ファイル内の整数を不明確にしてベクトルに格納し、最大から最小までソートし、最小のハーモニック平均を求める必要があります最大数。次に、ファイル内の平均値とすべての数値を新しいファイルに出力する必要があります。私は完全に10未満の整数で動作するコードを作成しましたが、文字列としてベクトルに数値を入力し、ファイルの各行を整数として入力するようにコードを書き直す必要がありますが、エラーが発生しています。 "AverageFile"には何も出力されず、ロード後にプログラムがクラッシュします。.txtファイルから数値を取り出してC++のベクトルに入れよう

私のコードの下で、私はこの問題はであると思う:それは "のstd :: bad_allocは何() 'のstd :: bad_alloc' のインスタンスを投げた後に呼び出さTERMINATE" エラーに

を与えますベクトルの入力または出力。

#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; 
} 
+1

'feederfile'は' ifstream'または 'ofstream'ですか? – Beta

+0

申し訳ありません、 'ofstream'を削除したことを忘れてしまいましたifstream – Uncblueguy

答えて

4

あなたはファイルからの読み取りを忘れていました。あなたはファイルとして無限ループは常にgood()になり、最終的にあなたがベクターにオブジェクトを追加しようとしているメモリが不足しているので、

while(feederfile.good()){ 
    score.push_back(line); 
    i++; 
} 

では、ファイルから読み取ることはありません。

使用feederfile.good()is not what you want to use for your conditionです。代わりに、読み取り操作をループ状態にしたいとします。だから我々がそれをするならば、我々は持っている

while(feederfile >> line){ 
    score.push_back(line); 
    i++; 
} 

これは、エラーやファイルの終わりになるまで読む。

+0

ありがとう!それは最終的に動作します。 – Uncblueguy

関連する問題