2013-04-18 164 views
0

所以当我的程序启动时,它会尝试从文件中读取产品列表。但如果该文件不存在,则会显示错误并继续。有问题即时是当它显示错误,它不继续执行do while循环从文件中读取。 C++

ifstream input; 
    input.open("data.txt"); 


    if (input.fail()) 
    { 
     cout << "\n Data file not found \n"; 
    } 
    ListItemType data; 

    input >> data.productname; 
    while((!input.eof())) 
    { 
     input >> data.category; 
     input >> data.productprice; 
     addproduct(head, data); 
     input >> data.productname; 
    } 

    input.close(); 
+1

什么是你做,而循环显示代码? – taocp 2013-04-18 02:32:16

+2

等待...即使文件不存在,您也希望它尝试读取? – Beta 2013-04-18 02:34:31

+0

我猜'input.eof()'从来没有真正的流不能打开。所以'while'循环会永远重复。 – Barmar 2013-04-18 02:36:35

回答

1

这是不相同的功能,但它通常是更好地实现像移动:

if (std::ifstream input("data.txt")) 
{ 
    ListItemType data; 
    while (input >> data.productname >> data.category >> data.productprice >> data.productname) 
     addproduct(head, data); 
    if (!input.eof()) 
     std::cerr << "Error parsing input file.\n"; 
}  
else 
    cout << "\n Data file not found \n"; 

如果你像上面那样构造你的if/else子句,不管发生什么,它会继续按照你的意愿继续下面的代码。

请注意,上面的代码在每次输入操作后检查问题。即使读取data.category失败,您的代码也会尝试读取data.productprice。这是那种你正在阅读产品名称两次怪异,和我假设你可以在I/O调用后addProduct命令 - 如果没有你需要像一个while循环:

while (input >> data.productname >> data.category >> data.productprice) 
    { 
     addproduct(head, data); 
     if (!(input >> data.productname)) 
      break; 
    }