0

こんにちは、私はクラスの割り当てを完了しようとしています。そこでは、従業員でいっぱいのファイルを ID 番号で並べ替える必要があります。ファイルには、従業員情報を含む 10 行があります。注文は ID LASTNAME FIRSTNAME です

プログラムは、並べ替え関数を記述してすべてのデータを配列に適切にコピーする前は問題なく実行されていましたが、並べ替え関数を追加した後も、何が原因であるかについてのヒントがなく、アクセス違反が発生し続けます。

助けていただければ幸いです。

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

class Employee
{
public:
    int _id;
    string _lastName;
    string _firstName;

    Employee()
    {
        _id = 0;
        _lastName = "n/a";
        _firstName = "n/a";
    }
};

void copyFile10(Employee [], int);
void sortFile10(Employee [], int);
int main()
{
    const int size10 = 10;
    Employee employees10[size10];

    copyFile10(employees10, size10); //1.fill array/copy file
    sortFile10(employees10, size10); //2. sort

    system("pause");
    return 0;
}

void copyFile10(Employee employees10[], const int size)
{
    ifstream data10("data_10.dat");
    for(int count = 0; count < 10; count++) //1.fill array/copy file
    {
        data10 >> employees10[count]._id;
        data10 >> employees10[count]._lastName;
        data10 >> employees10[count]._firstName;
    }
    data10.close();
}

void sortFile10(Employee employees10[], const int size)
{
    Employee buff1;
    Employee buff2;
    int counter = 0;
    bool ordered = false;

    while (ordered == false)
    {
        for(int count = 0; count < size-1; count++)
        {
            if(employees10[count]._id > employees10[count+1]._id)
            {
                buff1._id = employees10[count+1]._id;
                buff1._lastName = employees10[count+1]._lastName;
                buff1._firstName = employees10[count+1]._firstName;

                buff2._id = employees10[count]._id;
                buff2._lastName = employees10[count]._lastName;
                buff2._firstName = employees10[count]._firstName;

                employees10[count]._id = buff1._id;
                employees10[count]._lastName = buff1._lastName;
                employees10[count]._firstName = buff1._firstName;

                employees10[count+1]._id = buff2._id;
                employees10[count+1]._lastName = buff2._lastName;
                employees10[count+1]._lastName = buff2._lastName;

                counter++;
            }
            if(counter == 0)
            ordered = true;
            else
                counter = 0;
        }
    }
}
4

1 に答える 1

1
for(int count = 0; count < size; count++)
        {
            if(employees10[count]._id > employees10[count+1]._id)

ここで、ループの最後の反復で何が起こるでしょうか (つまり、いつcount9 になりますか?)。

于 2012-10-30T21:02:20.460 に答える