2013-04-18 157 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; 
    }