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
...
答案 0 :(得分:3)
永远不要使用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进行混乱测试等,只是从一对迭代器初始化的向量。
答案 1 :(得分:1)
您可以将while循环更改为
SInventory item;
while(initData >> item.itemID){
...
或在while循环结束时跳过空白
ws(initData);
或定义operator>>(istream&, SInventory &)
,然后执行
SInventory item;
while(initData >> item){
inven.push_back(item);
}