作为较大任务的一部分,我必须在一个类中创建一个方法,该方法可以读取五行数据,然后将该数据放入动态创建的对象中。我不确定如何将五行数据分别放入对象中。该代码应有助于更好地解释,但不能按预期工作。如果有人可以发现我的错误,请告诉我。如果您能帮助我,将不胜感激。同样,每五行读取一次,我创建一个新对象,直到没有剩余行。我怎么知道是否还剩几行?再次感谢您的帮助,谢谢您的宝贵时间。
inline void readFromFile(const string& fileName){
string title;
string category;
unsigned int runningTime;
unsigned int yearOfRelease;
double price;
ifstream myReadFile;
myReadFile.open(fileName);
while( myReadFile )
{
myReadFile>>title;
myReadFile >> category;
myReadFile >> runningTime;
myReadFile >> yearOfRelease;
myReadFile >> price;
v.push_back(new DVD(title,category,runningTime,yearOfRelease,price));
}
myReadFile.close();
for(unsigned int i = 0; i < v.size(); i++){
cout << *v.at(i) << endl;
}
}
最佳答案
问题在于带有字符串的运算符>>仅读取一个单词(而不是一行)。
您需要使用std :: getline()函数。
std::getline( myReadFile, title);
std::getline( myReadFile, category);
std::getline( myReadFile, runningTime);
std::getline( myReadFile, yearOfRelease);
std::getline( myReadFile, price);
为了方便起见,您应该为DVD写一个运算符>>
std::istream& operator>>(std::istream& str, DVD& data)
{
// Read data into data here
return str;
}
现在,您的循环变得更容易编写:
std::copy(std::istream_iterator<DVD>(myReadFile),
std::istream_iterator<DVD>(),
std::back_inserter(v)
);