2016-10-25 15 views
0

私は情報が入ったテキストファイルを持っています。それは次のようになります。ベクトル、構造、およびwhileループ - ファイルからの読み込み

Rimas 252 45 
Robertas 187 13 
Jurgis 205 36 
Matas 58 50 
Antanas 145 5 
10 20 

あなたはすべての行は、3人の異なるメンバー(名前、最初の数、第二の数)を持って見ての通り、2つだけのメンバー(2つの数値を)持っている最後の行まで。この情報を自分のコードに読み込もうとしています。 2つのメンバーがあり、その行に文字列がないので、最後の行まではすべて正常に動作します。私は別の行を認識し、上記の行と同じではなく、他の方法を読むために自分のコードを作成する必要があります。


#include <iostream> 
#include <fstream> 
#include <vector> 

using namespace std; 

struct lankytojai { // name, first number, second number 
    string vardas; 
    int litai; 
    int ltcentai; 
}; 

void read(vector<lankytojai> l) { 
    ifstream failas("vvv.txt"); //reads three members correct, last two incorrectly 
    int i = 0; 
    while(failas) { 

     lankytojai lan; 
     int lt; 
     string var; 

     while(!(failas >> lan.ltcentai)) { 
      failas.clear(); 
      if(failas >> var) { 
       lan.vardas += var; 
      } 
      if(failas >> lt) { 
       lan.litai = lt; 
      } 
      else { 
       return; 
      } 
     } 

     l.push_back(lan); 
     cout << l[i].vardas << " " << l[i].litai << " " << l[i].ltcentai << endl; 
     i++; 
    } 

} 

int main() { 
    vector<lankytojai> l; 
    read(l); 
    return 0; 
} 

答えて

0

単純にそれが含まれているどのように多くのスペースをチェックし、(std::stringなど)時に行全体を取得するためにstd::getline()を使用するようにコードを再構築。

for (string line; getline(failas, line);) { 
    size_t space_count = count(line.begin(), line.end(), ' '); 
    // ... 
} 
+0

はい、それは機能しますが、最後の行は{44 99 31 66 77}になります。 –

+0

@EdvinasSadeckas:その場合、 'space_count'は4になり、何をすべきかを決める必要があります。あなた次第。 –

+0

はい、私はそれを理解していますが、行のスペース番号に依存しないコードが必要です –

関連する問題