Ver Mensaje Individual
  #5 (permalink)  
Antiguo 17/06/2009, 13:33
xdunkelheitx
 
Fecha de Ingreso: enero-2009
Mensajes: 53
Antigüedad: 16 años
Puntos: 1
Respuesta: Problemas con apuntadores y archivos

gracias por responder, ya corregi sobre fread y fwrite pero aun me sigue botando basura, es decir bota el nombre pero tambien otras direcciones como el escritorio. y cuando quiero agregar otro dato lo reemplaza y cuando se cierra y quiero mostrar solo me sale una carita :S.

Nose que mas puede ser el problema para este algoritmo e estado intentando todo :S espero que puedan analizarlo para saber la causa.

gracias

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