2012-11-11 68 views
0

我試圖從每個文件打印第一行,然後從每個文件打印第二行等等。
當函數getline = EOF,則該文件被關閉,filesAreOpen遞減,雖然程序循環永遠從多個文件中打印行

void PrintLines(ifstream files[], size_t count) 
{ 
    string s; 
    ifstream *end, *start; 
    int filesAreOpen = count; 

    //continue while filesAreOpen > 0 
    while(filesAreOpen) 
    { 

    }  
} 
+0

爲什麼不用eof()檢查? http://www.cplusplus.com/reference/iostream/ios/eof/ – mlt

+0

檢查在哪裏?,我試圖讀取一行,並關閉文件,如果EOF – blitzeus

+0

我沒有寫C一段時間。但是像下面這樣的東西應該可以工作 - > is_open()&&!開始 - > eof()。你可能會重寫你的代碼。 getline返回istream http://www.cplusplus.com/reference/string/getline/。它永遠不會== EOF,儘管getline(* start,s).eof()可能工作。我希望它是有效的。 – mlt

回答

0

其實你不必如果達到EOF關閉文件。這會讓你的代碼更慢更痛苦的管理。因爲你必須檢查它是否打開,這涉及到文件名。在這種情況下,文件已經打開,您將從每個文件讀取第一行,而不是從每個文件的第二行開始,依此類推。但是,如果文件到達EOF,那麼當然你會錯過該文件並繼續讀取來自其他文件的行。直到所有文件都到達EOF。然後關閉它們。

void PrintLines(ifstream files[], size_t count) 
{ 

    int filesAreOpen = count; 
    char line[250]; 

    //continue while filesAreOpen > 0 
    while(filesAreOpen) 
    { 
     for(int i=0; i<count; i++) 
     { 
     if (!infile[i].eof())  
     { 
      infile[i].getline(line,250); 
      cout << line; 
     } 
      else 
      filesAreOpen--; 
     } 
    } 
      for(int i=0; i<count; i++) 
     files[i].close(); 
}