2010-03-04 42 views
0

我的函數需要ifstream的ofjects數組和ifstream的對象的數量,如下圖所示:索引我與計數參數while循環數組

void MergeAndDisplay(ifstream files[], size_t count) 

我的問題是我想用while循環讀取從文件(s)只要其中一個是打開的。當我到達eof時,我關閉了文件。所以我想我可以做類似

int fileNum = 0; 
while(files[fileNum].is_open() || something here) { 
//do stuff 
} 

但我真的不知道如何把參數的正確用量在我while循環...

回答

2

你將不得不計算的邏輯「此集合中的任何文件都會單獨打開。我建議讓它具有自己的功能,以便while循環可以清潔自然,例如

bool isAnyOpen(ifstream files[], size_t count) { 
    for (size_t i = 0; i < count; ++i) { 
    if (files[i].is_open()) return true; 
    } 
    return false; 
} 

然後,你可以寫

while(isAnyOpen(files, count)) { 
    // Your code here 
} 

編輯:這是比[R塞繆爾Klatchko貼的更一般情況下的解決方案。如果你的問題很簡單,只想讀取所有文件中的所有數據,那麼使用他的方法,因爲它更直接。

0

你可能想

while (fileNum < count && files[fileNum].is_open()) 

與你增加fileNum每當你在你的循環打開一個新文件的條件。

0

嘗試這樣:

void ProcessStream(std::istream& input_file) 
{ 
//... 
} 

// Your loop 
bool a_file_is_open = true; 
do 
{ 
    a_file_is_open = false; 
    for (unsigned int i = 0; i < MAX_FILES; ++i) 
    { 
    if (files[i].is_open()) 
    { 
     a_file_is_open = true; 
     ProcessStream(files[i]); 
     break; 
    } 
    } 
} while (a_file_is_open);