1

Тема: Некоректно записує дані в текстовий файл

Ось в мене є метод addParticipants який створює новий об'єкт класу Participants, і він чомусь некоректно записує дані в файл.
Що я не так роблю?

void Scool::addParticipants(int count)
{
    Participants zno;
    fstream fin;
    int i;
    char name[45];
    double averageScore;
    int passportId;
    char phone[45];
    char scool[45];
    for (i = 0; i < count; i++)
    {
        fin.open("bd.txt", fstream::app);
        do
        {
            cout << i  << ")---------------------------------" << endl;
            cout << "Name -> ";
            cin >> name;
            zno.setName(name);

            cout << "averageScore -> ";
            cin >> averageScore;
            zno.setAverageScore(averageScore);

            cout << "passportId -> ";
            cin >> passportId;
            zno.setPassportId(passportId);

            cout << "Phone -> ";
            cin >> phone;
            zno.setPhone(phone);

            cout << "Scool -> ";
            cin >> scool;
            zno.setScool(scool);

            cout << "-----------------------------------\n\n\n" << endl;
            if (!find(name, scool))
            {
                system("cls");
                cout << "New-------------------" << endl;
            }
            else
            {
                fin.write((char*)&zno, sizeof(zno));
                fin.close();
                break;
            }
        } while (true);
    }
}

https://replace.org.ua/uploads/images/9224/59591d8b4c3825c9c245417cf10a8141.jpg
https://replace.org.ua/uploads/images/9224/7b3079f8f208e90852f45baadc3bd73e.jpg

2

Re: Некоректно записує дані в текстовий файл

А визначення Participants ми телепатично маємо побачити?
Ну і write призначений для бінарних файлів, текстовий перегляд буде досить суттєво відрізнятися.

3

Re: Некоректно записує дані в текстовий файл

koala написав:

А визначення Participants ми телепатично маємо побачити?
Ну і write призначений для бінарних файлів, текстовий перегляд буде досить суттєво відрізнятися.

Є клас Participants з полями:
name (ім'я)
averageScore (середній бал з школи)
passportId (id паспорта)
phone(телефон)
Scool(школа)

Participants має два віртуальних метода

    virtual void add();
    virtual void print();

ну і там гетери і сетери для кожного поля

і є клас Scool який містить масив обє'ктів Participants
поля

    Participants zno;

методи

    int countsInFile();
    void deletezno();
    void addParticipants(int);
    void oldest();
    void print();
    void sort();
    int find(char*, char*);
    void edit();
    void search();

4 Востаннє редагувалося koala (22.09.2020 17:21:15)

Re: Некоректно записує дані в текстовий файл

Значить таки телепатично. Ок. Чекайте на телепатів.
Підкажу лише, що перші символи - це вказівник на таблицю віртуальних функцій.

Подякували: Betterthanyou, kоаlа, leofun01, HetmanNet4

5

Re: Некоректно записує дані в текстовий файл

Якщо ще не зрозуміли - write пише тупо байти в пам'яті. Якщо в тих байтах є щось корисне - він їх запише. А якщо там вказівник на справжні дані, який при наступному запуску буде зовсім іншим - то запише цей нікому не потрібний вказівник. Визначте функцію для запису у файл вашого об'єкту і пишіть його руками, по одному полю.

Подякували: HetmanNet1