错误:无限循环时加载元件到载体
问题描述:
void initializeVectorFromFile(vector<SInventory> & inven){
ifstream initData("inventoryData.txt");
if(!initData){
cout << "File could not be accessed! Press any key to terminate program...";
_getch();
exit(1);
}
while(!initData.eof()){
SInventory item;
initData >> item.itemID;
getline(initData,item.itemName);
initData >> item.pOrdered
>> item.menufPrice
>> item.sellingPrice;
item.pInStore = item.pOrdered;
item.pSold = 0;
inven.push_back(item);
cout << item.itemID << endl;
}
cout << "File Read Success!" << endl;
initData.close();
}
的.txt
文件我从读取包含在该顺序的结构化数据:错误:无限循环时加载元件到载体
int
string
int double double
输出这是在while循环的最后一行作为文件中的第一个itemID被重复。 initData
流不会读取.txt
文件中的后续条目。
1111
1111
1111
1111
1111
...
答
不要使用while (!initData.eof())
- 永远。这几乎是一个保证错误。
我的代码开始从文件中读取一个SInventor
项目:
std::istream &operator>>(std::istream &initData, SInventor &item) {
initData >> item.itemID;
getline(initData,item.itemName);
initData >> item.pOrdered
>> item.menufPrice
>> item.sellingPrice;
item.pInStore = item.pOrdered;
item.pSold = 0;
return initData;
}
有了到位,它可能是最简单的,只是做无功能的休息,只是初始化向量直接:
std::ifstream infile("yourfile.txt");
std::vector<SInventor> inven((std::istream_iterator<SInventor>(infile)),
std::istream_iterator<SInventor>());
没有循环,EOF等没有遗漏测试,只是从一对迭代器初始化的向量。
答
您可以将while循环改为
SInventory item;
while(initData >> item.itemID){
...
或while循环
ws(initData);
结束跳过空白或定义operator>>(istream&, SInventory &)
,只是做
SInventory item;
while(initData >> item){
inven.push_back(item);
}
首先,不要使用'while(!whatever_file.eof())'。 –
家庭作业标签已弃用,不应在新问题中使用。 – Kitsune
@JerryCoffin在以下情况下,这是可以接受的用法,为什么我不能在我的示例中使用此方法,而应该执行什么操作。谢谢http://stackoverflow.com/questions/9979894/using-vector-of-user-defined-class-type-objects – Michael