Здравствуйте, имеется проблема с записью объектов класса в текстовый файл

Имеется класс student, данные, которого нужно записать в текстовый файл. Во время компиляции программы происходит бесконечная запись в файл, которая не прерывается. При этом записывается только один класс(name, age, kurs в единственном числе),хотя по условию задания количество "студентов" вводится с клавиатуры. Как следует исправить данные ошибки?

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

class student{
    private:
        string name;
        int age;
        int kurs;

    public:
    student(string name, int age, int kurs) {
        this->name = name;
        this->age = age;
        this->kurs = kurs;
    }
    ~student(){};

    double get_age(){
        return age;
    }

    int get_kurs(){
        return kurs;
    }

    void print()
    {
        cout << "Name: " << name << endl;
        cout << "age: " << age << endl;
        cout << "kurs: " << kurs << endl << endl;
    }

    void key()
    {
        cin.ignore(INT_MAX, '\n');

        cout << "Enter name: ";
        cin >> name;
        cout << "Age: ";
        cin >> age;
        cout << "Enter course: ";
        cin >> kurs;
        cout << endl;
    }


};


int main() {
    string namest;
    int agest;
    int kursst;
    int number;

    cout << "Enter the number of student: ";
    cin >> number;

    student stud(namest, agest, kursst);
   
    ofstream file("file.txt",ios::out);
    if (!file.is_open()){
        cout<<"ошибка в открытии файла"<<endl;
    }
    else{
        cout<<"файл открыт"<<endl;
        for (int i=0;i<number;i++){
            stud.key();
            file.write((char*)&stud,sizeof(stud));
        }
    }
    file.close();

    ifstream infile("file.txt",ios::in);
        cout << "файл открыт" << endl;
        while (!infile.eof()) {
            if (stud.get_kurs() == course) {
                all_age += stud.get_age();
                counter++;
            }
        }
        cout << "Average age is about: " << all_age / counter << endl;
    file.close();


    return 0;
}


Ответы (1 шт):

Автор решения: Sergey Tatarincev

А вы точно понимаете что вы пытаетесь записать в файл? Какие данные будут по адресу

(char*)&stud

И не следует ли вам перегружать преобразование типов

operator char* (){/* ...  */}

или уже писать в файл отдельно get_age(),get_kurs()?

И по второй части main: где вы хоть что-то пытаетесь из открытого файла прочитать? (и главное зачем)

→ Ссылка