Link to home
Start Free TrialLog in
Avatar of claracruz
claracruz

asked on

Helpwith writing data to file

Hello Experts,

what exactly does this line of code do;

dataIn.write((char*) (&person),sizeof (person));

I got a code form PSC, and I need to understand exactly what this line of code is doing to be able to work it into my program.
Thing is I hardly know anything about c++ at the moment,and I have been kind of thrown off the deep end with a program am creating, anyway...

QUESTION 2;
This code, I got from PSC, the details written to the file is name, address and telephone number, all are char data types.

I need to incorporate an account number (int datatype) for the program i am working on, but don't know how to make the above line of code write the account number in the file as well.

I am generating the account number in code and placing this in a variable. so How would I make the contents of the account number variable write to the file.

Avatar of grg99
grg99

It looks like there is a struct variable named "person", and that statement writes the structure to the file.

If you want to add an account number, just add "int accountnumber;" to the structure definition.  Then it will get written to the file.

I guess 'person' is a structure instance.
write() writes a string of chars to a file, but as person is not a string of chars, you have to "cast" to make write works. Sizeof is a compiler-time function that returns the sizeof any data type, in this case, the size of person structure.  
Notice the ampersand (&) before person, it will give you a "pointer" (memory address) to structure. But as write requires a pointer to a char array, it has been casted to (char *), that is: convert person pointer to char pointer.
Maybe you can post the person structure definition.
Avatar of claracruz

ASKER

I don't really understand any of the above, but here is the code the rest of the code:


 /*--------------------\
| users data entry here |
 \--------------------*/
void inputData(void)
{
      Contact person;
      char continueAdding='Y';
      ofstream dataIn("addressBook.dat",ios::ate);//create binary file
      
      do
      {
            system("CLS");
            cout << "New contact person entry";
            cout << "\n------------------------\n";
            person.add(1);

            dataIn.write((char*) (&person),sizeof (person));
            
            cout << "\nDo you want to add another person? [Y/N] :";
            cin >>continueAdding;
            continueAdding = toupper(continueAdding);
      
      }while (continueAdding!='N');
      
            
      dataIn.close();//close file stream
}


some code from contact.h file;

class Contact {
      char name[25];
      char address[50];
      char telephone[15];
      
      /*the below method is private and used only from within this
       class and transparent to oustide function*/
      bool stringCheck(char*,int);

public:

      void add(int);
      bool compare(char*);
      void display();
      char* returnName();

};

void Contact::add(int flag)
{
      while (!cin.get()) {};

      if (flag==1)
      {
            
            do
            {
                  cout << "\n Enter name of contact person : ";
                  cin.getline(name,1000,'\n');
                  strupr(name);
            }while (!stringCheck(name,1));
                   }
}

char* Customer::returnName(void)
{
      return name;
}

How and where do I get account number into the scheme of things.
Please explain with as little technical speak as possible.


All the data input function is done from contact.h file.
ASKER CERTIFIED SOLUTION
Avatar of grg99
grg99

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Was afraid you were goin to mention the text book thing.... wouldn't be asking if I understood the greek in the textbook. but thanks anyway.