我有一个最初为空的结构化数组,有4种数据类型,包括字符串,2个int和1个浮点数。我有一个dvd标题和其他属性的列表(其他3个,其中2个是最后一个是浮点数)保存在文本文件中,我需要将文本文件中的数据输入到我的结构中。这是我的代码,但似乎它不起作用?
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());
答案 0 :(得分:5)
从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>());
答案 1 :(得分:0)
你应该像这样构建它:
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>
中的每一部分。