2

学校向けに C++ でプログラムを書いています。

別の関数のループから関数を呼び出す必要があります。5 行を読み取り、読み取った数値の各コレクションを double 値に入れる必要があります。現在、ファイルを正しく読み取れるようにしようとしています。現在、プログラムを実行するたびに、ループを通過して情報を 5 回出力しますが、最後の行の数字を 5 回しか出力しないようです。

プログラムが入力ファイルの最後の行でのみ動作するように、コードのどの部分がそれを作っているのでしょうか?

ここに私の情報があります:

読み取る必要がある入力ファイル:

1121 15.12 40                                                                                     

9876 9.50 47

3333 22.00 35

2121 5.45 43

9999 10.00 25

私が使用しているコード:

 double process_employee(double& employeeNumber, double& employeeRate, double& employeeHours)

 {

     ifstream employeeInputFile;

     employeeInputFile.open("employee input file.txt");

     if(employeeInputFile.fail())
     {
         cout << "Sorry, file could not be opened..." << endl;

        system("pause");
         exit(1);
     }

     //For some reason, this is only printing the data from the last line of my file 5 times
     while (!employeeInputFile.eof())  
     {
         employeeInputFile >> employeeNumber >> employeeRate >> employeeHours;
     }

}

void process_payroll()
{   
     double employeeNumber = 1.0;
     double employeeRate = 1.0;
     double employeeHours = 1.0;

     cout << "Employee Payroll" << endl << endl;
     cout << "Employee  Hours   Rate    Gross   Net Fed State   Soc Sec" 
          << endl;

     //caling process_employee 5 times because there are 5 lines in my input file
     for(int i = 1; i <= 5; i++)
     {
         process_employee(employeeNumber, employeeRate, employeeHours);

         cout << "Employee #: " << employeeNumber << " Rate: " << employeeRate << " Hours: " 
         << employeeHours << endl;
     }
}
4

3 に答える 3

2

これwhile (!employeeInputFile.eof())は、ファイルの終わりまで行を読み続けることを意味します。本文が実行されるたびに、最後に読み取られた値が上書きされます。

process_payroll後続の呼び出し時process_employeeに、ストリームを再度開き、同じことを再度実行するため、同じ値が5回出力されます。

于 2012-11-05T01:49:21.093 に答える
2

以下のwhileループを省略することから始めます。

 //For some reason, this is only printing the data from the last line of my file 5 times
 while (!employeeInputFile.eof())  
 {
     employeeInputFile >> employeeNumber >> employeeRate >> employeeHours;
 }

そして、入力の最初の行しか取得できないことに気付くでしょう。入力ストリームをに渡すことを検討する必要がありますprocess_employee

于 2012-11-05T01:50:42.817 に答える
2

変数を上書きし続けます:

while (!employeeInputFile.eof())  
{
   employeeInputFile >> employeeNumber >> employeeRate >> employeeHours;
}

次のような中間でそれらを保存する必要があります。

std::vector<EmployeeStructure> someVector;

while (!employeeInputFile.eof())  
{
   employeeInputFile >> employeeNumber >> employeeRate >> employeeHours;
   someVector.push_back(EmpoyeeStructure(employeeNumber, employeeRate, employeeHours));
}

次に、そのベクターを渡し、情報を出力します。

于 2012-11-05T01:54:34.413 に答える