2014-04-04 27 views
0

對不起,如果這個問題有重複,我只看到人們問這在C. 我想加載一個並行數組與外部數據文件中的數據,但是當文件打開並開始加載時,我輸出的所有內容都是空白的控制檯。無法從C++中的文本加載並行陣列

有問題的代碼是...

include <iostream> 
#include <fstream> 
using namespace std; 
... 
Void InventoryData::loadArrays() 
{ 
    ifstream partIn; 
    partIn.open("inventoryPricing.dat"); 
    if (partIn.is_open()) 
     { 
      //Prime Read 
      partIn >> partNum[invCount] 
         >> price[invCount]; 


     while(!partIn.eof()) 
      { 
       invCount++; 
       partIn >> partNum[invCount] 
         >> price[invCount]; 

      } //END While 

     partIn.close(); 
     } //END IF*/ 

    else 
     { 
      invCount = -1; 
      cout<<"File failed to open."<<endl; 
     } 

} 

當我註釋掉if語句,一切都很好,我也得到了「文件打開失敗」的聲明沒有問題,但如果它試圖打開這只是一個空白的屏幕?不知道從哪裏開始看,能否有一雙更明智的眼睛把我引向正確的道路?

編輯:在遵循一些建議之後,我在每個循環下面都添加了一個cout行。它現在返回每個文件,但也是一個附加。 最重要的是,通過這個新增功能,該文件現在可以延續到之前沒有的其他代碼行中?

+0

這就是你展示的代碼的自然結果 - 即在塊存在的唯一輸出語句中,如果該文件執行不打開。爲什麼不(或)(a)觀察在調試器中運行的代碼,或者(b)在讀取數據後立即嘗試打印數據,而不是查找輸出(不是生成的)。 I.e'cout << partNum [invCount] <<「 - 」<< price [invCount] << endl;' – enhzflep

回答

1

它現在返回每個文件,但也有一個附加。

您的代碼的測試eof()不正確。除非您已經輸入失敗,否則您應該測試輸入操作是否成功,幾乎不會輸入eof()。正確的代碼是:

if (ifstream partIn("inventoryPricing.dat")) 
{ 
    invCount = 0; 

    while (partIn >> partNum[invCount] >> price[invCount]) 
     ++invCount; 

    if (partIn.fail()) 
    { 
     // could set invCount to -1 to avoid partial processing? 
     std::cerr << "File parsing failed after " << invCount << " entries\n"; 
    } 
} 
else 
{ 
    invCount = -1; 
    std::cerr << "File failed to open.\n"; 
} 

最重要的是,這個新此外,該文件現在一直持續到代碼的其他行的地方之前沒有?

我甚至無法猜測你可能是由意味着....