0

私はコンピュータ サイエンスの学生で、コードを理解しようとしていますが、理解できません。このコードにより、ユーザーはバイナリ ファイル内の特定のレコード (構造) を変更できます。わかりませんrecords.seekg(recNum * sizeof(person), ios::beg); and records.seekp(recNum * sizeof(person), ios::beg);。rec num が構造体のサイズのポインターを使用しているのはなぜですか。どんな助けでも大歓迎です。

void modify()
{
    int recNum;

    displayAll();

    fstream records("records.dat", ios::in | ios::out | ios::binary);   
    //get record number of the desired record.
    cout << "Which record do you want to edit? ";
    cin >> recNum;

    recNum = recNum - 1;

    records.seekg(recNum * sizeof(person), ios::beg);
    records.read(reinterpret_cast<char *>(&person), sizeof(person));

    cout << "ID   Age " << " " << "Name" << setw (28) << right << "Phone\n";

    cout << person.id << "  " << left << setw(20) << person.name << right << setw(20) << person.phone << endl;

    //Get new record data.
    cout << "\nEnter the new data:\n";
    cout << "Id: ";
    cin >> person.id;

    cin.ignore();
    cout << "Name: ";
    cin.getline(person.name, NAME_SIZE);

    cout << "Age: ";
    cin >> person.age;

    cin.ignore();
    cout << "Phone: ";
    cin.getline(person.phone, PHONE_SIZE);

    records.seekp(recNum * sizeof(person), ios::beg);
    records.write(reinterpret_cast<char *>(&person),sizeof(person));
    records.close();
}
4

1 に答える 1

0

アスタリスクは単なる乗算であるため、サイズへのポインターは使用されません。インデックスにファイルに格納されている要素のサイズを掛けています。

たとえば、各レコードが 20 バイトの場合、最初のレコードはオフセット 0、2 番目のレコードはオフセット 20、40、60 などになります。

于 2014-12-16T19:25:59.573 に答える