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#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <conio.c>
#include <string.h>
#include <math.h>
#include <malloc.h>
using std::iostream;
using std::cout;
using std::cin;
using std::endl;
struct fecha
{
int dd;
int mm;
int aaaa;
};
struct direccion
{
char dir[50];
char disto[50];
char dpto[50];
char pais[50];
};
struct persona
{
char cod[8];
char ap[20];
char am[20];
char nom[50];
int sex;
fecha fnac;
direccion dir;
};
//declaracion de funciones
//************************
int menu();
void lecturapers(persona **p,int *dim);
void mostrarpers(persona *p,int dim);
//Principal
//*********
int main()
{ persona *a;
int opcion,n;
textbackground(15);
textcolor(0);
do{
system("cls");
opcion=menu();
switch(opcion)
{
case 0: exit(1);
case 1: system("cls");
lecturapers(&a,&n);
break;
case 2: system("cls");
mostrarpers(a,n);
break;
}
}while(opcion);
system("PAUSE");
return 0;
}
//Menu de Opciones
//****************
int menu()
{ int op;
cout<<"\n \t\t\t DIRECTORIO TELEFONICO\n";
cout<<"\t\t\t ---------------------\n\n\n";
cout<<"\t\t\t [1]Ingresar Datos\n";
cout<<"\t\t\t [2]Mostrar Personas\n";
cout<<"\t\t\t [0]Salir del directorio\n\n";
do{
cout<<"\n\t\t\t Elige la opcion=";
cin>>op;
}while(op<0 && op>8);
return(op);
}
//Lectura de datos
//****************
void lecturapers(persona **p,int *dim)
{ FILE *F;
int i;
/* *p=new (struct persona); */
*p = (struct persona*) malloc (sizeof (struct persona));
cout<<"Nombre(s):";
gets((*p)->nom);
cout<<"Apellido Paterno:";
gets((*p)->ap);
F = fopen("D:/trabajo/Agenda.dat","rb+");
if(F==NULL)
{
printf(" No se puede abrir el archivo\n");
system("pause");
exit(1);
}
fwrite(*p,sizeof(struct persona),1,F);
printf("\n\n\tDOCENTE ARCHIVADO!!!");
printf("\n\n\t");
fclose(F);
system("pause");
/*for(i=0;i<3;i++)
{cout<<"Nombre:";
gets((*p+i)->nom);}
*dim=3;
system("pause");*/
}
void mostrarpers(persona *p,int dim)
{ FILE *F;
int i;
F = fopen("D:/trabajo/Agenda.dat","rb");
if(F==NULL)
{
printf("\n\tNo se puede abrir el archivo\n");
exit(1);
}
while(!feof(F))
{
printf("%s",p->nom);
printf("\t\t%s",p->ap);
cout<<"\n\n";
fread(p,sizeof(struct persona),1,F);
}
fclose(F);
system("pause");
}