我正在尝试从文件中读取项目列表,然后将它们存储到向量中。问题是我的代码将最后一个项目添加到向量中两次,我不确定为什么它会继续读取文件,即使程序已到达末尾。
这是文本文件中的内容。当我显示矢量的内容时,“Oranges”行出现两次。
苹果-磅-10 2
橙子-磅-5 6
这是代码
//将列表内容读取到文件中
while (!inputFile.fail())
{
//Extract the line from the list
getline(inputFile,item_name,'-');
getline(inputFile,item_unit,'-');
inputFile >> item_amount;
inputFile >> item_price;
//Create an instance of the item object
Item New_Item(item_name, item_unit, item_amount,item_price);
//Push it to the list vector
list.push_back(New_Item);
}
//Close the file
inputFile.close();
这是该病的典型症状while (!infile.fail())
反模式。
我定义一个结构和重载operator>>
对于该类型:
struct item {
std::string name;
std::string unit;
int amount;
int price;
};
std::istream &std::operator>>(std::istream &is, item &i) {
getline(is, i.name, '-');
getline(is, i.unit, '-');
is >> i.amount;
return is >> i.price;
}
有了这些定义,读取数据就变得微不足道了:
std::ifstream inputFile("fileNameHere");
std::vector<New_Item> items { std::istream_iterator<Item>(inputFile),
std::istream_iterator<Item>() };
[我把它从list
to vector
,因为,嗯,你真的不想要list
。你可以把它改回来,但可能不应该。]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)