#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;
/*
*
*/
inline void eatline() {while(cin.get() != '\n') continue;}
struct planet{
char name[20];
double population;
double g;
};
const char *file = "planets.dat";
int main(int argc, char** argv) {
planet pl;
cout<<fixed<<right;
ifstream fin;
fin.open(file,ios_base::in | ios_base::binary);
if(fin.is_open())
{
cout<<"Here are the contents of "<<file<<" file: \n";
while(fin.read((char*)&pl,sizeof(pl)))
{
cout<<setw(20)<<pl.name<<": "
<<setprecision(0)<<setw(12)<<pl.population
<<setprecision(2)<<setw(6)<<pl.g<<endl;
}
fin.close();
}
ofstream fout(file,ios_base::out | ios_base::app | ios_base::binary);
if(!fout.is_open())
{
cerr<<"Can`t open "<<file<<" file for output; \n";
exit(EXIT_FAILURE);
}
cout<<"Enter planet name (enter a blank to quit): \n";
cin.get(pl.name,20);
while(pl.name[0] != '\0')
{
eatline();
cout<<"Enter planetary population: ";
cin>>pl.population;
cout<<"Enter planet`s acceleration of gravity: ";
cin>>pl.g;
eatline();
fout.write((char*)&pl,sizeof pl);
cout<<"Enter planet name (enter a blank to quit): \n";
cin.get(pl.name,20);
}
fout.close();
fin.clear();
fin.open(file,ios_base::in | ios_base::binary);
if(fin.is_open())
{
cout<<"Here are the new contents of the "<<file<<" file: \n";
while(fin.read((char*)&pl,sizeof pl))
{
cout<<setw(20)<<pl.name<<": "
<<setprecision(0)<<setw(12)<<pl.population
<<setprecision(2)<<setw(6)<<pl.g<<endl;
}
fin.close();
}
return 0;
}