2016-02-27 95 views
0

我想讀取一個字符串行的行下來.txt文件,以便啓動一個使用構造函數,需要一個字符串的對象數組。閱讀輸入構建一個對象

文本文件是這樣寫

TransAm
Mustang
Corvette

我覺得我的循環不迭代的信息我想正確設置。有沒有簡單的方法來完成這個? main.cc

#include <string> 
    #include <iostream> 
    #include "Car.cc" 
    #include <fstream> 
    using namespace std; 

    int main() 
    { 

     Car cars[3]; 


     string STRING; 
     ifstream infile; 
     infile.open("cars.txt"); 

// THIS IS HOW IT'S ACHIEVED USING FOR-LOOP - Sam 

for(int i = 0; i<3 && infile;++i){ 
      getline(infile,STRING); 
      cars[i].setName(STRING); 
    } 


/* THIS IS WHAT I HAD 
     while(!infile) 
     { 
      getline(infile,STRING); 
      for(int i = 0; i<sizeof(cars);i++){ 
       cars[i].setName(STRING); 
      } 
     } 
    */ 
     infile.close(); 
     for(int j = 0;j<sizeof(cars);j++){ 
      cars[j].print(); 
     } 

    } 

Car.h

#include <string> 


using namespace std; 

class Car{ 

public: 
    Car(); 
    Car(string); 
    string getName(); 
    void setName(string); 
    void print(); 

private: 
    string name; 
}; 

Car.cc

#include <string> 
#include "Car.h" 

using namespace std; 

Car::Car() 
{ 

} 

Car::Car(string s) 
{ 
    setName(s); 
} 

void Car::setName(string s) 
{ 
    name = s; 
} 

string Car::getName() 
{ 
    return name; 
} 

void Car::print() 
{ 
    cout << name; 
} 
+0

'而(!INFILE)'我覺得你的循環就什麼都沒有。 – Blacktempel

+0

將'while(!infile)'改爲'while(getline(infile,STRING))' –

+0

我試着一段時間循環但結果無法讀取並設置「Trans-Am」 'while while(infile) \t { \t \t對(INT I = 0; I <3 && infile中; ++ⅰ){ \t \t \t函數getline(infile中,STRING); \t \t \t cars [i] .setName(STRING); \t \t} \t}' – Genesis

回答

1

這點需要改正:

  1. while (!infile)阻止你進入該循環。
  2. 你不需要兩個循環。

您可以修改你的循環是這樣的:

for (int i = 0; i < sizeof(cars) && getline(infile, STRING); ++i) 
    cars[i].setName(STRING); 

或者這樣:

for (int i = 0; i < sizeof(cars) && infile; ++i) { 
    getline(infile, STRING); 
    cars[i].setName(STRING); 
} 
+0

我希望您沒有刪除以前的修改。當你更新它們時,看到我可以採取的不同方式,這真的很整齊。謝謝。 – Genesis

+0

@Genesis更新 – Sam

1

正如有人說,「變化而(!INFILE)改爲(函數getline(INFILE ,STRING))「但是不要忘記刪除getline(infile,STRING);之後。

1

您的循環目前沒有正確打開文件。只有在打開的電話不成功時纔會進入。

你的循環更改爲

while (getline(infile,STRING)) 
{ 
    //... 
} 

while (infile) 
{ 
    //... 
}