12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- // binary.cpp -- binary file I/O
- #include <iostream> // not required by most systems
- #include <fstream>
- #include <iomanip>
- #include <cstdlib> // (or stdlib.h) for exit()
- inline void eatline() { while (std::cin.get() != '\n') continue; }
- struct planet
- {
- char name[20]; // name of planet
- double population; // its population
- double g; // its acceleration of gravity
- };
- const char * file = "planets.dat";
- int main()
- {
- using namespace std;
- planet pl;
- cout << fixed << right;
- // show initial contents
- ifstream fin;
- fin.open(file, ios_base::in |ios_base::binary); // binary file
- //NOTE: some systems don't accept the ios_base::binary mode
- if (fin.is_open())
- {
- cout << "Here are the current 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();
- }
- // add new data
- ofstream fout(file,
- ios_base::out | ios_base::app | ios_base::binary);
- //NOTE: some systems don't accept the ios::binary mode
- if (!fout.is_open())
- {
- cerr << "Can't open " << file << " file for output:\n";
- exit(EXIT_FAILURE);
- }
- cout << "Enter planet name (enter a blank line 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 line "
- "to quit):\n";
- cin.get(pl.name, 20);
- }
- fout.close();
- // show revised file
- fin.clear(); // not required for some implementations, but won't hurt
- 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();
- }
- cout << "Done.\n";
- // keeping output window open
- // cin.clear();
- // eatline();
- // cin.get();
- return 0;
- }
|