Trying to read a record of students with their name and numbers. Writing to the file seems fine. However, reading from it prints a never-ending output. The statement - while(!file.eof()) - is causing the problem. But it's how I read the remaining person_details. Your help would be greatly appreciated.
#include <iostream>
#include <fstream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::fstream;
using std::string;
using std::ios;
class telephone
{
protected:
    string name;
    int number; 
public:
    void getDetails();
    void printDetails() const;
};
void telephone:: getDetails()
{
    cout<<"Enter name : "; getline(cin,name);
    cout<<"Enter number : ";cin>>number;
}
void telephone:: printDetails() const
{
    cout<<"Name : "<<name<<endl;
    cout<<"Number : "<<number<<endl;
}
int main(int argc, char const *argv[])
{
    telephone person;
    fstream file("telefile.txt",ios::in | ios::out | ios::binary | ios::app);
    if (!file)
    {
        cout<<"Invalid file name."<<endl;
        return 1;
    }
    //writing
    char choice;
    do{
        cout<<"----------"<<endl;
        cout<<"Person : "<<endl;
        cout<<"----------"<<endl;
        person.getDetails();
        file.write(reinterpret_cast<char*>(&person),sizeof(person));
        cout<<"Enter one more?";    
        cin>>choice;cin.ignore();
    }while(choice == 'y');
    //reading
    file.seekg(0);                    
    file.read(reinterpret_cast<char*>(&person),sizeof(person));
    while(!file.eof())
    {
        cout<<"----------"<<endl;
        cout<<"Person : "<<endl;
        cout<<"----------"<<endl;
        person.printDetails();
        file.read(reinterpret_cast<char*>(&person),sizeof(person));
    }
    return 0;
}
 
     
     
    