Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/06/2009, 08:05
xdunkelheitx
 
Fecha de Ingreso: enero-2009
Mensajes: 53
Antigüedad: 16 años, 2 meses
Puntos: 1
Información Problemas con apuntadores y archivos

Hola, estoy intentando hacer una agenda con los datos principales de una persona, lo trato de hacer con estructura y un array dinamico (apuntador) pero recien estoy entrando al tema de archivos y tambien deseaba incluirlo.

La cuestion es que ingrese los datos todo bien, luego voy al submenu mostrar y me sale pero una vez que quiero ingreso denuevo no me muestra el anterior (sobreescribe). Una vez cierro el programa y vuelvo a entrar y pongo mostrar y solo sale basura.

El problema creo q es en fread y fwrite pero no logro arreglarlo. Espero que me puedan ayudar aqui esta el codigo.


Código agenda:
Ver original
  1. #include <iostream.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <conio.h>
  5. #include <conio.c>
  6. #include <string.h>
  7. #include <math.h>
  8.  
  9. using std::iostream;
  10. using std::cout;
  11. using std::cin;
  12. using std::endl;
  13.  
  14.  
  15. struct fecha
  16. {
  17.    int dd;
  18.    int mm;
  19.    int aaaa;
  20. };
  21.  
  22. struct direccion
  23. {
  24.    char dir[50];
  25.    char disto[50];
  26.    char dpto[50];
  27.    char pais[50];
  28. };
  29.  
  30. struct persona
  31. {
  32.    char cod[8];
  33.    char ap[20];
  34.    char am[20];
  35.    char nom[50];
  36.    int sex;
  37.    fecha fnac;
  38.    direccion dir;
  39. };
  40. //declaracion de funciones
  41. //************************
  42. int menu();
  43. void lecturapers(persona **p,int *dim);
  44. void mostrarpers(persona *p,int dim);
  45.  
  46. //Principal
  47. //*********
  48. int main()
  49. {   persona *a;
  50.     int opcion,n;
  51.     textbackground(15);
  52.     textcolor(0);
  53.     do{
  54.       system("cls");
  55.       opcion=menu();
  56.      
  57.       switch(opcion)
  58.             {
  59.              case 0: exit(1);
  60.              case 1: system("cls");
  61.                      lecturapers(&a,&n);
  62.                      break;
  63.              case 2: system("cls");
  64.                      mostrarpers(a,n);
  65.                      break;
  66.             }
  67.     }while(opcion);
  68.        
  69.        
  70.    
  71.        
  72.  
  73.       system("PAUSE");
  74.       return 0;
  75. }
  76.  
  77. //Menu de Opciones
  78. //****************
  79. int menu()
  80. {   int op;
  81.    
  82.     cout<<"\n \t\t\t   DIRECTORIO TELEFONICO\n";
  83.     cout<<"\t\t\t    ---------------------\n\n\n";
  84.     cout<<"\t\t\t   [1]Ingresar Datos\n";
  85.     cout<<"\t\t\t   [2]Mostrar Personas\n";
  86.     cout<<"\t\t\t   [0]Salir del directorio\n\n";
  87.     do{
  88.        cout<<"\n\t\t\t   Elige la opcion=";
  89.        cin>>op;
  90.     }while(op<0 && op>8);
  91.     return(op);
  92.  
  93. }
  94.  
  95. //Lectura de datos
  96. //****************
  97.  
  98. void lecturapers(persona **p,int *dim)
  99. {    FILE *F;
  100.      int i;
  101.      *p=new (struct persona);
  102.      cout<<"Nombre(s):";
  103.      gets((*p)->nom);
  104.      cout<<"Apellido Paterno:";
  105.      gets((*p)->ap);
  106.      F = fopen("D:/trabajo/Agenda.dat","a+");
  107.      if(F==NULL)
  108.             {
  109.                printf(" No se puede abrir el archivo\n");
  110.                system("pause");
  111.                exit(1);
  112.             }
  113.      fwrite(&p,sizeof(*p),1,F);
  114.      printf("\n\n\tDOCENTE ARCHIVADO!!!");
  115.      printf("\n\n\t");
  116.      fclose(F);  
  117.      system("pause");
  118. }
  119.  
  120. void mostrarpers(persona *p,int dim)
  121.  
  122. {    FILE *F;
  123.      int i;
  124.      F = fopen("D:/trabajo/Agenda.dat","a++");
  125.      if(F==NULL)
  126.      {
  127.          printf("\n\tNo se puede abrir el archivo\n");
  128.          exit(1);
  129.      }
  130.      while(!feof(F))
  131.      {
  132.       printf("%s",p->nom);
  133.       printf("\t\t%s",p->ap);
  134.       cout<<"\n\n";
  135.       fread(&p,sizeof(*p),1,F);    
  136.      }
  137.      fclose(F);
  138.      system("pause");
  139.  }

gracias por su atencion.