Helpwith writing data to file

Posted on 2004-07-31
Last Modified: 2010-04-01
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...

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.

Question by:claracruz
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
  • 2
LVL 22

Expert Comment

ID: 11686076
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.

LVL 55

Expert Comment

by:Jaime Olivares
ID: 11686082
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.
LVL 55

Expert Comment

by:Jaime Olivares
ID: 11686085
Maybe you can post the person structure definition.
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!


Author Comment

ID: 11686169
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
            cout << "New contact person entry";
            cout << "\n------------------------\n";

            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);


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


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

      if (flag==1)
                  cout << "\n Enter name of contact person : ";
            }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.
LVL 22

Accepted Solution

grg99 earned 500 total points
ID: 11687656
Add the line "char accountnumber[20];" to the class definition for "Contact".

Add right after the get name of contact person:
               cout << "\n Enter account number of contact person : ";
               cin.getline(accountnumber , 1000,'\n');
.. but it looks like you're rather low on the C++ familiarity, maybe you should go back and read the textbook?


Author Comment

ID: 11691943
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.

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Often, when implementing a feature, you won't know how certain events should be handled at the point where they occur and you'd rather defer to the user of your function or class. For example, a XML parser will extract a tag from the source code, wh…
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the b…
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.

705 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question