0

各ファイルの最初の行、次に各ファイルの 2 行目などを印刷しようとしています。
getline = EOF の場合、そのファイルは閉じられ、filesAreOpen はデクリメントされますが、プログラムは永久にループします。

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

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

    }    
}
4

1 に答える 1

0

実際、EOF に達した場合、ファイルを閉じる必要はありません。これにより、コードが非常に遅くなり、管理が困難になります。ファイル名を含む、開いているかどうかを確認する必要があるためです。この場合、ファイルは既に開いており、各ファイルの 2 行目よりも 1 行目を読み取ることになります。しかし、ファイルが 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();
}
于 2012-11-11T21:43:04.467 に答える