File I/O (Reading from a Random-Access File)

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • intOwnsVoid
    New Member
    • Jan 2008
    • 11

    File I/O (Reading from a Random-Access File)

    This program compiles but it's not searching properly.

    [COLOR="Red"]Circle.h[/COLOR]
    [code=c++]
    #ifndef CIRCLE_H
    #define CIRCLE_H

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

    class Circle
    {
    friend ostream& operator <<(ostream& output, const Circle& aCircle);
    friend istream& operator >>(istream& input, Circle& aCircle);

    public:
    Circle();
    Circle(double radius, int id);
    Circle(const Circle& aCircle);

    void SetCircleRadius (double radius) { _circleRadius = radius; }
    void SetCircleId(int id) { _circleId = id; }

    double GetCircleRadius () const { return _circleRadius; }
    int GetCircleId() const { return _circleId; }

    private:
    double _circleRadius;
    int _circleId;
    };

    #endif

    [/code]

    [COLOR="Red"]Circle.cpp[/COLOR]
    [code=c++]
    #include "Circle.h"

    Circle::Circle( )
    {
    _circleId = 0;
    _circleRadius = 0.0;
    }

    Circle::Circle( double radius, int id)
    {
    _circleId = id;
    _circleRadius = radius;
    }

    Circle::Circle( const Circle& aCircle)
    {
    _circleId = aCircle._circle Id;
    _circleRadius = aCircle._circle Radius;
    }

    ostream& operator <<(ostream& output, const Circle& aCircle)
    {
    output << "\n ------------" << endl;
    output << " Id radius" << endl;
    output << " ------------" << endl;
    output << " " << aCircle._circle Id << " " << aCircle._circle Radius << endl;
    output << " ------------" << "\n\n";

    return (output);
    }

    istream& operator >>(istream& input, Circle& aCircle)
    {
    int quantity;
    cout << "\nHow many circles do you want to add ";
    input >> quantity;

    for (int i = 0; i < quantity; ++i)
    {
    cout << "\n\nEnter the ID of Circle #" << (i + 1) << " : ";
    input >> aCircle._circle Id;

    cout << "Enter Radius of Circle #" << (i + 1) << " : ";
    input >> aCircle._circle Radius;

    cout << endl;
    }

    return (input);
    }

    [/code]

    [COLOR="Red"]main.cpp[/COLOR]
    [code=c++]
    #include <iostream>
    #include <conio.h>
    #include <fstream>
    using namespace std;

    #include "Circle.h"

    int main ()
    {
    Circle aCircle;
    fstream file;
    int option;

    do
    {
    cout << "Menu \n"
    << " (1) Add Circle(s) \n"
    << " (2) Find a Circle by ID \n"
    << " (3) Exit \n"
    << "Your Selection -> ";
    cin >> option;

    switch (option)
    {
    case 1:
    file.close();
    file.clear();

    file.open("Circ le.dat", ios::out | ios::app | ios::binary);

    if (!file)
    {
    cerr << "\n\nFailed to open file.\n\n";
    system("PAUSE") ;
    exit(1);
    }
    else
    {
    cin >> aCircle;
    file.write(rein terpret_cast<ch ar*> (&aCircle), sizeof(Circle)) ;
    }
    break;

    case 2:
    file.close();
    file.clear();


    cout << "Enter id: ";
    int id;
    cin >> id;
    aCircle.SetCirc leId(id);

    file.open("Circ le.dat", ios::in | ios::app | ios::binary);

    if (!file)
    {
    cerr << "\n\nFailed to open file.\n\n";
    system("PAUSE") ;
    exit(1);
    }
    else
    {
    file.seekg(id * sizeof(Circle), ios::beg);
    file.read(reint erpret_cast<cha r *> (&aCircle), sizeof(Circle)) ;

    cout << aCircle;
    }
    break;


    case 3:
    file.close();
    cout << "\n\nG o o D B y E\n\n";
    exit(0);
    break;


    default:
    cerr << "\nERROR: Wrong Option menu. Please try again.\n\n";

    }

    } while (option != 3);

    return EXIT_SUCCESS;
    }

    [/code]
  • aTsFQe3
    New Member
    • Feb 2008
    • 5

    #2
    It works fine for me, change:

    Code:
    file.open("Circle.dat", ios::in | ios::app | ios::binary);
    to:
    Code:
    file.open("Circle.dat", ios::in |  ios::binary);
    ios::app isn't appropriate in this situation, because the file is being read and not written to.

    Comment

    Working...