我有一个结构化数组,它最初是空的,有4种数据类型,分别为ng、string、2个int和1个float。我有一个dvd标题和其他属性的列表(3个其他,其中2个是int,最后一个是float)保存在一个文本文件中,我需要将文本文件中的数据输入到我的结构中。这是我的代码,但似乎不起作用?
do
{
for(int i=0;i<MAX_BOOKS;i++)
{
tempTitle= getline(myfile,line);
temChapters = getline(myfile,line);
tempReview = getline(myfile,line);
tempPrice = getline(myfile,line);
}
}while(!myfile.eof());
getline
的返回是从中读取的流,而不是从中读取数据的字符串。
您还将重复地将数据读取到同一个位置(line
),而不将其保存在任何位置。
你的循环有缺陷(while (!somefile.eof())
基本上总是坏掉的)。
您通常想要的是从重载operator>>
开始,从流中读取单个逻辑项,然后使用它来填充这些项的向量。
// The structure of a single item:
struct item {
std::string title;
int chapters;
int review;
int price;
};
// read one item from a stream:
std::istream &operator>>(std::istream &is, item &i) {
std::getline(is, i.title);
is >> i.chapters >> i.review >> i.price;
is.ignore(4096, 'n'); // ignore through end of line.
return is;
}
// create a vector of items from a stream of items:
std::vector<item> items((std::istream_iterator<item>(myfile)),
std::istream_iterator<item>());
您应该这样构建它:
std::ifstream myfile("filename.dat");
std::string line;
while (getline(myfile, line))
{
// you can use std::string::find(), std::string::at(), std::string::substr
// to split the line into the necessary pieces
}
然后,您可以使用Jerry coffins答案将每个片段保存在vector<item>
中。