作为更大的赋值的一部分,我必须在类中创建一个方法,该方法可以读取五行数据,然后将该数据放入动态创建的对象中。我不确定如何将五行数据分别放入对象中。代码应该有助于更好地解释,但它不能按预期工作。如果有人能发现我的错误,请告诉我。如果你能帮助我,我将不胜感激。此外,每读取五行,我创建一个新对象,直到没有任何行。我怎么知道是否有任何线条?再次感谢任何帮助,谢谢你的时间。
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;
}
}
答案 0 :(得分:2)
问题是运营商&gt;&gt;用一个字符串只读一个字(不是一行)。
您需要使用std :: getline()函数。
std::getline( myReadFile, title);
std::getline( myReadFile, category);
std::getline( myReadFile, runningTime);
std::getline( myReadFile, yearOfRelease);
std::getline( myReadFile, price);
为方便起见,你应该写一个运算符&gt;&gt;对于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)
);
答案 1 :(得分:0)
这就是我现在所拥有的,该文件仍未被读取。我迷失了该怎么做。
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.eof() )
{
getline( myReadFile, title);
getline( 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;
}
}
答案 2 :(得分:0)
我对你使用getline()感到有些困惑。尝试通过调用myReadFile变量上的getline()来获取数据。这使用了一个字符数组。因此,重写代码的一种可能方式可能如下所示:
PS:请注意,在创建字符串时,您的文件名会正确分隔斜杠(\)。
void readFromFile(const string& fileName){
char title[80];
char category[80];
unsigned int runningTime;
unsigned int yearOfRelease;
double price;
ifstream myReadFile;
myReadFile.open(fileName.c_str());
while( ! myReadFile.eof() )
{
myReadFile.getline( title, 80);
myReadFile.getline( category, 80);
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;
}
}