2012-11-11 70 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(); 
}