2017-12-27 10 views
-3

私はクラスを持っていますが、オブジェクトの配列にオブジェクトを読み込みたいのですが、クラスの属性(long data [4];)に問題があります。私はそれをどのように読むことができるのか分かりません。 Readメソッドでは、私はファイルからすべての属性を読み取って、データ要素のベクトルを作成し、そのベクトルとのコンストラクタを追加したいと思います。魔法使いはファイルから読み込まれます。C++配列の属性を持つファイルからオブジェクトを読み取る

//Class: 
class Utilitati{ 
    const int id; 
    float PretUtilitati; 
    char * NumeUtilitati; 
    int Numarachizitii; 
    long data[4]; --This is the problem(I dont know how can i read it) 


//Constructor: 
    Utilitati(float PretUtilitati, char * NumeUtilitati, int Numarachizitii, long data[]) :id(3){ 
     this->PretUtilitati = PretUtilitati; 
     this->NumeUtilitati = new char[strlen(NumeUtilitati) + 1]; 
     strcpy(this->NumeUtilitati, NumeUtilitati); 
     this->Numarachizitii = Numarachizitii; 
     for (int i = 0; i < Numarachizitii; i++) 
      this->data[i] = data[i]; 
    } 

Data must be a vector from file. 
//Read Method: 
void citireFisier(char *numeFisier, Utilitati ** vectUtilitati) 
{ 
    FILE* file = fopen(numeFisier, "r+"); 
    if (!file) 
     cout << "\nEroare citire!" << endl; 
    else 
    { 
     int contor = 0; 
     float PretUtilitati; 
     char NumeUtilitati[20]; 
     int Numarachizitii; 
     long data[4]; 

     while (!feof(file)) 
     { 
      fscanf(file, "%f%s%i%l", &PretUtilitati, &NumeUtilitati, &Numarachizitii, &data); 
      Utilitati* NewUtilitati = new Utilitati(PretUtilitati, NumeUtilitati, Numarachizitii,data); 
      vectUtilitati[contor++] = NewUtilitati; 
     } 
    } 
} 
The file has the next format: 
    100 //float PretUtilitati 
    Gaze //char * NumeUtilitati; 
    3  // int Numarachizitii; 
    20171012 //long data[0]; 
    20151012 ////long data[2]; 
    20011023 ///long data[Numarachizitii]; 

答えて

0

あなたdataが固定して常に長さ4である場合、あなたはfscanfパターンで%ldlongための書式指定子)4回繰り返すことができます。

fscanf(file, "%f%s%i%ld%ld%ld%ld", 
    &PretUtilitati, &NumeUtilitati, &Numarachizitii, 
    &data[0], &data[1], &data[2], &data[3]); 

そして、それは一定の長さではない場合、あなたが最初にその長さを読み、そしてループfscanfそのエントリを使用しなければなりません。

関連する問題