2016-02-27 54 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) 
{ 
    //... 
}