Por mucho que intente y lei, no logre encontrar la solucion. Lo mas cerca que he estado es lo que voy a subir.. Desde ya, gracias!
Código:
#include <stdio.h> #include <stdlib.h> #include <string.h> /* CONTROL DE MEMORIA Persona *aux; if ((aux = (Persona *) malloc (sizeof (Persona))) == NULL){ return -1; } */ typedef struct TipoFecha{ int dia; int mes; int anio; }TFecha; typedef struct TipoAmigo{ char apellido[20]; char nombre[20]; char email[30]; char celular[15]; TFecha fecNac; char flag; }Amigo; typedef struct ElementoLista{ Amigo dato; struct Persona *sig; }Persona; typedef struct ListaIdentificar { Persona *inicio; Persona *fin; int cantidad; }Lista; int guardarArchivo(FILE *f,Lista *l); int mostrarArchivo(FILE *f); void inicializacion (Lista *l); int insInicioLista (Lista *l,Amigo p); int insEnListaVacia (Lista *l,Amigo p); int agregarAmigo(Lista *l); Amigo pedirAmigo(); int estaAmigo(Lista *l,Amigo p); int ordenar(Lista *l); int estaAmigo(Lista *l,Amigo p); void mostrarDatos(Lista *l); void mostrarAmigo(Amigo p); void main(){ Lista *lista; if ((lista = (Persona *) malloc (sizeof (Persona))) == NULL){ return -1; } inicializacion(lista); int pos,control; do{ if (lista->cantidad==0){ agregarAmigo(lista); }else if(lista->cantidad==1){ agregarAmigo(lista); }else{ agregarAmigo(lista); } printf("\n\n"); printf("Seguir agregando?\n"); scanf("%i",&control); if (control==1){ ordenar(lista); mostrarDatos(lista); printf("\n\n\n\t"); system("pause"); }else{ printf("\n\n\t"); printf("Gracias por utilizar este programa.\n"); } }while (control==1); /*-------------------PRUEBA DE ARCHIVO-----------*/ printf("Vengooo\n"); FILE *f1,*f2; printf("Sigooooo\n"); //if(existeArchivo("agenda1")==0){ f1 = fopen ("agenda1.txt", "w+b"); // f2 = fopen ("fichero2.dat", "wb"); if(guardarArchivo(f1,lista)==-1){ printf("\nNo se pudo guardar."); }else{ printf("Archivo Guardado con Exito."); mostrarArchivo(f1); } fclose(f1); } void inicializacion (Lista *l){ l->fin=NULL; l->inicio=NULL; l->cantidad=0; } int agregarAmigo(Lista *l){ Amigo persona=pedirAmigo(); int encontrado=estaAmigo(l,persona); if (encontrado==-1){ return encontrado; }else if(l->cantidad==0){ insEnListaVacia(l,persona); }else{ insInicioLista(l,persona); } } Amigo pedirAmigo(){ Amigo aux; do{ printf("\nIngrese el apellido de su amigo.\n"); fflush(stdin); gets(aux.apellido); printf("\nEs %s",aux.apellido); }while (strlen(aux.apellido)>20); do{ printf("\nIngrese el nombre de su amigo.\n"); fflush(stdin); gets(aux.nombre); }while (strlen(aux.nombre)>20); do{ printf("\nIngrese el email de su amigo.\n"); fflush(stdin); gets(aux.email); }while (strlen(aux.email)>30); do{ printf("\nIngrese el celular de su amigo.\n"); fflush(stdin); gets(aux.celular); }while (strlen(aux.celular)>15); printf("\nFecha de cumpleaños de su amigo."); do{ printf("\nIngrese el anio de nacimiento: "); scanf("%i",&aux.fecNac.anio); }while ((aux.fecNac.anio>2016)||(aux.fecNac.anio<1900)); do{ printf("\nIngrese el mes de nacimiento: "); scanf("%i",&aux.fecNac.mes); }while ((aux.fecNac.mes>12)||(aux.fecNac.mes<1)); do{ printf("\nIngrese el dia de nacimiento: "); scanf("%i",&aux.fecNac.dia); }while ((aux.fecNac.dia>31)||(aux.fecNac.dia<1)); aux.flag=' '; return aux; } int estaAmigo(Lista *l,Amigo p){ int i=1; Persona *aux; if ((aux = (Persona *) malloc (sizeof (Persona))) == NULL){ return -1; } if(l->cantidad==0){ return 0; }else { aux=l->inicio; while (i<=l->cantidad){ if(strcmpi(aux->dato.apellido,p.apellido)!=0){ i++; aux=aux->sig; }else if(strcmpi(aux->dato.nombre,p.nombre)!=0){ i++; aux=aux->sig; }else if(strcmpi(aux->dato.email,p.email)!=0){ i++; aux=aux->sig; }else if(strcmpi(aux->dato.celular,p.celular)!=0){ i++; aux=aux->sig; }else if(aux->dato.fecNac.anio!=p.fecNac.anio){ i++; aux=aux->sig; }else if(aux->dato.fecNac.mes!=p.fecNac.mes){ i++; aux=aux->sig; }else if(aux->dato.fecNac.dia!=p.fecNac.dia){ i++; aux=aux->sig; }else{ return -1; } } } return 0; } int insEnListaVacia (Lista *l,Amigo p){ Persona *aux; if ((aux = (Persona *) malloc (sizeof (Persona))) == NULL){ return -1; } aux->dato=p; aux->sig=NULL; l->inicio=aux; l->fin=aux; l->cantidad++; } int insInicioLista (Lista *l,Amigo p){ Persona *aux; if ((aux = (Persona *) malloc (sizeof (Persona))) == NULL){ return -1; } aux->dato=p; aux->sig=l->inicio; l->inicio=aux; l->cantidad++; } void mostrarAmigo(Amigo p){ printf("\nLos datos del amigo es: \n"); printf("El apellido de su amigo: %s\n",p.apellido); printf("El nombre de su amigo: %s\n",p.nombre); printf("El email de su amigo: %s\n",p.email); printf("El celular de su amigo: %s\n",p.celular); printf("Fecha de cumpleaños de su amigo. %i/%i/%i\n",p.fecNac.dia,p.fecNac.mes,p.fecNac.anio); } void mostrarDatos(Lista *l){ Persona *aux; int i=1; if ((aux = (Persona *) malloc (sizeof (Persona))) == NULL){ return -1; } aux=l->inicio; while (i<=l->cantidad){ mostrarAmigo(aux->dato); aux=aux->sig; i++; } } int ordenar(Lista *l){ int pos=1; Amigo cam; if(l->cantidad==1){ return 0; }else{ Persona *aux,*aux2,*min; if ((aux = (Persona *) malloc (sizeof (Persona))) == NULL){ return -1; } if ((aux2 = (Persona *) malloc (sizeof (Persona))) == NULL){ return -1; } if ((min = (Persona *) malloc (sizeof (Persona))) == NULL){ return -1; } min=l->inicio; while(pos<l->cantidad){ aux=min; aux2=min->sig; while(aux2!=NULL){ if((strcmpi(aux->dato.apellido,aux2->dato.apellido))>0){ //se comparan apellidos aux=aux2; //se compara el nombre }else if(((strcmpi(aux->dato.apellido,aux2->dato.apellido))==0)&&((strcmpi(aux->dato.nombre,aux2->dato.nombre))>0)){ aux=aux2; } aux2=aux2->sig; } cam=min->dato; min->dato=aux->dato; aux->dato=cam; min=min->sig; pos++; } return 0; } } int guardarArchivo(FILE *f,Lista *l){ Persona *aux; Amigo a; int i=1; if ((aux = (Persona *) malloc (sizeof (Persona))) == NULL){ return -1; } aux=l->inicio; while(aux!=NULL){ a=aux->dato; fwrite((Amigo *)&a,i*sizeof(Amigo),i,f); aux=aux->sig; i++; } return 0; } int mostrarArchivo(FILE *f){ Amigo aux; int numReg = ftell(f)/sizeof(Amigo),i; for(i=0;i<numReg;i++){ fseek (f, i, SEEK_SET); fread (&aux,sizeof(Amigo),1, f); mostrarAmigo(aux); } }