错误:无限循环时加载元件到载体

问题描述:

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 
... 
+2

首先,不要使用'while(!whatever_file.eof())'。 –

+0

家庭作业标签已弃用,不应在新问题中使用。 – Kitsune

+0

@JerryCoffin在以下情况下,这是可以接受的用法,为什么我不能在我的示例中使用此方法,而应该执行什么操作。谢谢http://*.com/questions/9979894/using-vector-of-user-defined-class-type-objects – Michael

不要使用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); 
}