generic code for writing structures, help me make it more generic

cpp Viet Nam
  • 12 years ago
    well ive got a program that scans a structure from cin and puts it in a binary file, and can also take it out of the binary file and display it. i like the interface ive made very much, i want to use this code for many many projects without having to change much,

    especially for many different types of structures,

    so im trying to make it more generic, but i havent a clue how to proceed. my guess is that ill have to use some element of classes.

    im not asking u to write my code i just want a hint. anything at all would be greatly appreciated

    take a look:

    #include <iostream>
    #include <fstream>
    #include "exportimportstructdec.h"
    using namespace std;

    grades myGradesi,myGradeso,myGradesa;

    //declare pointers to structures for file io:
    grades * pMyGradeso=&myGradeso;
    grades * pMyGradesa=&myGradesa;
    grades * pMyGradesi;

    int main ()
        int choice;
        char opFile[]="binary.bin";
        char opMessage[]=" please enter 4 grades separated by pressing enter ";
        char menu[]=" do u want to 1, read from the file, or 2, write over the file or 3, append the file or 4, exit the program? ";
        //give the user options:
            //option 1, read from the file:
            if (choice==1)
            //option 2, write over the file:
            if (choice==2)
            //option 3, append the file:
            if (choice==3)
        //option 4, exit:
        }while (choice!=4);
        return 0;

    #include <iostream>
    #include <fstream>
    #include "exportimportstructdec.h"
    using namespace std;

    extern grades myGradesi, myGradeso, myGradesa;
    extern grades *pMyGradeso, *pMyGradesa, *pMyGradesi;

    //the purpose of this program is to send structures into a file, and then read them from the same file
    //structure to be written:

    void readfile(char readFileName[],grades structi,grades * pStructi)
        //check the size of the file and allocate appropriate memory:
        long begin,end;
        ifstream filecheck (readFileName);
        if (filecheck.is_open())
            begin = filecheck.tellg();
            filecheck.seekg (0, ios::end);
            end = filecheck.tellg();
            int fileSize=(end-begin)/(sizeof(structi));
            pStructi= new grades [fileSize];
        else cout << " Unable to open file for size check ";
        //read the file into memory:
        int structArraySize=0;
        ifstream filei; (readFileName, ios::in|ios::binary);
        if (filei.is_open())
            while ((filei.peek()!=EOF))
      <char*>(&pStructi[structArraySize]), sizeof(grades));
            //display memory on screen:
        else cout << " Unable to open file for input ";

    void wrtfile(char wrtFileName[],char wrtMessage[],grades structo,grades * pStructo)
        ofstream fileo; (wrtFileName, ios::out|ios::binary);
        cout << wrtMessage;
        if (fileo.is_open())
            fileo.write (reinterpret_cast<char*>(pStructo), sizeof(structo));
        else cout << " Unable to open file for output ";

    void appfile(char appFileName[],char appMessage[],grades structa,grades * pStructa)
        ofstream filea; (appFileName, ios::app|ios::binary);
        cout << appMessage;
        if (filea.is_open())
            filea.write (reinterpret_cast<char*>(pStructa), sizeof(structa));
        else cout << " Unable to open file for output ";

    void scanstruct(grades * pStructscan)
        cin >> (*pStructscan).grade1 >> (*pStructscan).grade2 >> (*pStructscan).grade3 >> (*pStructscan).grade4;

    void printmemory(int specificStructArraySize,grades * pStructi)
        for(int i=0;i<specificStructArraySize;i++)
            cout<<" grade1 "<< (pStructi[i]).grade1<<" grade2 "<< (pStructi[i]).grade2<<" grade3 "<< (pStructi[i]).grade3<<" grade4 "<< (pStructi[i]).grade4<<" ";


    struct grades
        int grade1;
        int grade2;
        int grade3;
        int grade4;

    void printmemory(int ,grades * );
    void scanstruct(grades * );
    void readfile(char [],grades ,grades * );
    void wrtfile(char [],char [],grades ,grades * );
    void appfile(char [],char [],grades ,grades * );

  • 12 years ago

    im afraid i dont know what that nonsense   is where all of my tabs are and cant get rid of it

  • 12 years ago

     Hi chopficaro,

    I had a problem like yours, when I pasted some text from MS Word.

    I suggest, just paste your code from VS or a .txt file, or just type that here (first clear all of your post).

Post a reply

Enter your message below

Sign in or Join us (it's free).


Why not write for us? Or you could submit an event or a user group in your area. Alternatively just tell us what you think!

Our tools

We've got automatic conversion tools to convert C# to VB.NET, VB.NET to C#. Also you can compress javascript and compress css and generate sql connection strings.

“Linux is only free if your time has no value” - Jamie Zawinski