[C con Clase] Ficheros

Alejandro Cuervo Huertas alejandrochas en live.com.ar
Mie Ene 19 19:41:23 CET 2011


Hola 
 
Tengo un codigo para crear ficheros donde puedo acceder para sacar mi informacion.
 
El problema esta que al  sacar mi información, me salen los 25 espacios que tengo para contactos, como el ultimo que he definido, todos los 25 salen como el ultimo que he definido, entiendo que en el ejemplo que ustedes me dan parece que cualquier definición de personas que en  mi caso son 25 contactos sale igual. Es decir si defino Contacts[1] para name, phone email birthday, al imprimirlos salen los 25 contactos como si fueran contacts[1].
 
He intentado decifrar alguna forma para separarlos pero no he podido asi que recurro a su ayuda. 
Les facilito una parte de mi codigo apenas para lo pedido;
 
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <cstring>
 
using namespace std;
 

struct personas{
       
           char Name[20];
           char Phone[20];
           char EMail[25];
           char Birthday[20];
       
                           }Contacts[25];

int main()
{
  
char  a;
 
 while ( a != '6')
       {
         cout<<"1.Type a new contact"<<endl<<"2.Edit a contact"<<endl<<"3.Search  a contact for his name"<<endl<<"4.Search a contact alphabetically"<<endl<<"5.Delete a contact"<<endl<<"6.Exit"<<endl;
         cout<<endl<<"Choose for a option that you wish"<<endl;
         cin>>a;

       if (a == '1')               /// Esta es la parte donde entro los contactos he intentado modificar en la parte de sizeof tanto en      la     parte de donde va contacts y me sigue pasando lo mismo.
                   {
                     int i=0;
                       
                        while(  i<= 25)
                              {
                               ifstream fentrada("Record.dat",
                                      ios::in | ios::trunc | ios::binary);
                              fentrada.read(reinterpret_cast<char *>(&Contacts[i]),  sizeof(personas));
                                  if (Contacts[i].Name[0] == 0) {fentrada.close(); break;}
                                    i++;
                                     fentrada.close();
                                    }
 

                             if (i <= 25)
                                {
                                        
                                               
                               ofstream fsalida("Record.dat",
                                                 ios::out | ios::binary);

                                 cout<<"Type the Name of the Contact"<<endl;
                                 cin>>Contacts[i].Name;
                                 cout<<"Type the Phone of the Contact"<<endl;
                                 cin>>Contacts[i].Phone;
                                 cout<<"Type the E-Mail of the Contact"<<endl;
                                 cin>>Contacts[i].EMail;
                                 cout<<"Type the Birthday of the Contact"<<endl;
                                 cin>>Contacts[i].Birthday;
                                 
                                 fsalida.write(reinterpret_cast<char *>(&Contacts[i]),  sizeof(poin[i]));
   
                                        fsalida.close();
                                        
                                        
                                        
                                        cout<<"The contact has been entered correctly"<<endl;
                                        system("PAUSE");
                                     }
                                            else {cout<<endl<<"The Agenda is Full"<<endl;
                                              
                                                   system("PAUSE");}
 

               
 
                      }
                         else              /// Esta es la parte donde lo leo y salen todos los contactos definidos como cualquier ultimo entrado.
 
                              { if (a == '4')
                                                                 {
                                                                   char a = 97;    
                                                                   int i=0;
                                                                   
                                                                   cout<<"Name         Phone          Email          Birthday"<<endl; 
                                                                   
                                                                   while ( a != 123)
                                                                         {
                                                                             
                                                                             i=0;
                                                                               poin=&Contacts[i];
                                                                           while( i<= 25)
                                                                                {
                                                                                  ifstream fentrada("Record.dat",
                                                                                       ios::in | ios::binary);
                                                                                        fentrada.read(reinterpret_cast<char *>(&poin[i]),  sizeof(personas));
                                                                                      
                                                                            if (Contacts[i].Name[0] == a) 
                                                                               {
   
                                                                                  cout<<Contacts[i].Name<<"     "<<Contacts[i].Phone;
cout<<"      "<<Contacts        [i].EMail<<"       "<<Contacts[i].Birthday<<endl;
  
                                                                                                }
                                                                                    i++;
                                                                             
                                                                                      fentrada.close();
                                                                             
                                                                                            }
                                                                             
                                                                             if (a >= 97) a -=32;
                                                                                         else a+=33;
                                                                       
                                                                          }
                                                                       

                                                                       }
 
 
   }
 
    return 0;
    
 
}
                             

 
 
Si en el caso el codigo no es el correspondiente para lo que intento hacer, les agradeceria mucho uno que me sirva y explicado,
 
Gracias de Antemano
Att: Alejandro 
  		 	   		  
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20110119/deb8cf49/attachment.html>


Más información sobre la lista de distribución Cconclase