me falla el leer y guardar
nose como realizar el leer para que lea el archivo en c
typedef struct nodoagenda{
int dni;
char nombre[15];
char apellidos[25];
char direccion[30];
struct nodoagenda *ant;
struct nodoagenda *sig;
}nodoagenda;
void CrearAgenda(nodoagenda *(&));
int AgendaVacia(nodoagenda *);
int AgendaLlena(nodoagenda *);
int EstaElementoAgenda(nodoagenda *,int);
void InsertarAgenda(nodoagenda *(&));
void EliminarElementoAgenda(nodoagenda *(&));
void MostrarInversoAgenda(nodoagenda *);
void BorrarAgenda(nodoagenda *(&));
void GuardarAgenda(nodoagenda *);
void LeerAgenda(nodoagenda *listad);
//
void CrearAgenda(nodoagenda *(&listad))
{
listad = NULL;
}
/*****************************************************************************************/
int AgendaVacia(nodoagenda *listad)
{
int dev = 0;
if (listad==NULL)
dev = -1;
return dev;
}
/*****************************************************************************************/
// Controlaremos la memoria en la insercion de elementos en la lista
int AgendaLlena(nodoagenda *)
{
return 0;
}
/*****************************************************************************************/
// Devuelve -1 si el elemento esta en la lista. 0 en caso contrario
int EstaElementoAgenda(nodoagenda *listad,int dni)
{
nodoagenda *Paux;
int res;
Paux = listad;
while ((Paux != NULL)&&(Paux->dni != dni))
Paux = Paux->sig;
if (Paux == NULL)
res = 0;
else
res = -1;
return res;
}
/*****************************************************************************************/
void InsertarAgenda(nodoagenda *(&listad))
{
nodoagenda *Nuevonodo, *Paux;
int dni;
char nombre[15],apellidos[25];
Nuevonodo = (nodoagenda *)malloc(sizeof(nodoagenda));
if (Nuevonodo == NULL)
printf("\nSe produjo un error en la creación del elemento.");
else
{
do{
printf("Introduce el dni: ");
scanf("%d",&dni);
}while((dni < 1)||(EstaElementoAgenda(listad,dni)));
Nuevonodo->dni = dni;
fflush(stdin); //Borra el buffer de teclado
printf("Introduce el nombre: ");
gets(Nuevonodo->nombre);
printf("Introduce los apellidos: ");
gets(Nuevonodo->apellidos);
printf("Introduce la direccion: ");
gets(Nuevonodo->direccion);
Nuevonodo->sig = NULL;
Nuevonodo->ant = NULL;
if (AgendaVacia(listad))
listad = Nuevonodo;
else
{
if (dni > listad->dni)
{
Nuevonodo->sig = listad;
listad->ant=Nuevonodo;
listad = Nuevonodo;
}
else
{
Paux = listad;
while (((Paux->sig)!=NULL)&&((dni < Paux->sig->dni)))
Paux = Paux->sig;
if (Paux->sig != NULL) //Si no es el ultimo nodo
Paux->sig->ant=Nuevonodo;
Nuevonodo->sig = Paux->sig;
Nuevonodo->ant = Paux;
Paux->sig = Nuevonodo;
}
}
}
}
/*****************************************************************************************/
void EliminarElementoAgenda(nodoagenda *(&listad),int dni)
{
nodoagenda *actual = listad;
while (actual->dni != dni)
actual = actual->sig;
if (actual->ant == NULL) // Es el primer nodo de la lista
{
if (actual->sig!=NULL) // Hay mas de un nodo en la lista
actual->sig->ant=NULL;
listad=actual->sig;
}
else
{
if (actual->sig!=NULL) // Es el ultimo nodo de la lista
actual->sig->ant=actual->ant;
actual->ant->sig=actual->sig;
}
free(actual);
}
/*****************************************************************************************/
void MostrarInversoAgenda(nodoagenda *listad)
{
nodoagenda *paux=listad;
if (paux != NULL)
{
// Recorremos toda la lista hasta el final
while (paux->sig != NULL)
paux=paux->sig;
// Recorremos toda la lista en orden inverso hasta el primer nodo
while (paux != NULL)
{
printf("\n\nDNI: %d",paux->dni);
printf("\nNombre: %s",paux->nombre);
printf("\nApellidos: %s",paux->apellidos);
printf("\nDireccion: %s",paux->direccion);
paux=paux->ant;
}
}
}
/*****************************************************************************************/
void BorrarAgenda(nodoagenda *(&listad))
{
nodoagenda *paux;
while (listad != NULL)
{
paux=listad;
listad=listad->sig;
free(paux);
}
}
/*****************************************************************************************/
void GuardarAgenda(nodoagenda *listad)
{
nodoagenda *paux=listad;
FILE*pFile;
if (paux != NULL)
{
// Recorremos toda la lista hasta el final
while (paux->sig != NULL)
paux=paux->sig;
pFile = fopen ( "amigos.txt" , "wb" );//abrir fichero
if(pFile== NULL)
puts ("\nError guardando el fichero.");
else
{
// Recorremos toda la lista en orden inverso hasta el primer nodo
while (paux != NULL)
{
fwrite(&paux, sizeof paux, 1, pFile);
printf("\n\nDNI: %d",paux->dni);
printf("\nNombre: %s",paux->nombre);
printf("\nApellidos: %s",paux->apellidos);
printf("\nDireccion: %s",paux->direccion);
paux=paux->ant;
}
if( !fclose(pFile) )
printf( "Fichero Guardado\n" );
else
printf( "Error: Fichero NO Guardado\n" );
}
}
}
/*****************************************************************************************/
void LeerAgenda(nodoagenda *listad)
{
nodoagenda *Nuevonodo;
FILE *file = fopen("amigo.txt", "rb");
if ( file != NULL )
{
fclose(file);
}
}
typedef struct nodoagenda{
int dni;
char nombre[15];
char apellidos[25];
char direccion[30];
struct nodoagenda *ant;
struct nodoagenda *sig;
}nodoagenda;
void CrearAgenda(nodoagenda *(&));
int AgendaVacia(nodoagenda *);
int AgendaLlena(nodoagenda *);
int EstaElementoAgenda(nodoagenda *,int);
void InsertarAgenda(nodoagenda *(&));
void EliminarElementoAgenda(nodoagenda *(&));
void MostrarInversoAgenda(nodoagenda *);
void BorrarAgenda(nodoagenda *(&));
void GuardarAgenda(nodoagenda *);
void LeerAgenda(nodoagenda *listad);
//
void CrearAgenda(nodoagenda *(&listad))
{
listad = NULL;
}
/*****************************************************************************************/
int AgendaVacia(nodoagenda *listad)
{
int dev = 0;
if (listad==NULL)
dev = -1;
return dev;
}
/*****************************************************************************************/
// Controlaremos la memoria en la insercion de elementos en la lista
int AgendaLlena(nodoagenda *)
{
return 0;
}
/*****************************************************************************************/
// Devuelve -1 si el elemento esta en la lista. 0 en caso contrario
int EstaElementoAgenda(nodoagenda *listad,int dni)
{
nodoagenda *Paux;
int res;
Paux = listad;
while ((Paux != NULL)&&(Paux->dni != dni))
Paux = Paux->sig;
if (Paux == NULL)
res = 0;
else
res = -1;
return res;
}
/*****************************************************************************************/
void InsertarAgenda(nodoagenda *(&listad))
{
nodoagenda *Nuevonodo, *Paux;
int dni;
char nombre[15],apellidos[25];
Nuevonodo = (nodoagenda *)malloc(sizeof(nodoagenda));
if (Nuevonodo == NULL)
printf("\nSe produjo un error en la creación del elemento.");
else
{
do{
printf("Introduce el dni: ");
scanf("%d",&dni);
}while((dni < 1)||(EstaElementoAgenda(listad,dni)));
Nuevonodo->dni = dni;
fflush(stdin); //Borra el buffer de teclado
printf("Introduce el nombre: ");
gets(Nuevonodo->nombre);
printf("Introduce los apellidos: ");
gets(Nuevonodo->apellidos);
printf("Introduce la direccion: ");
gets(Nuevonodo->direccion);
Nuevonodo->sig = NULL;
Nuevonodo->ant = NULL;
if (AgendaVacia(listad))
listad = Nuevonodo;
else
{
if (dni > listad->dni)
{
Nuevonodo->sig = listad;
listad->ant=Nuevonodo;
listad = Nuevonodo;
}
else
{
Paux = listad;
while (((Paux->sig)!=NULL)&&((dni < Paux->sig->dni)))
Paux = Paux->sig;
if (Paux->sig != NULL) //Si no es el ultimo nodo
Paux->sig->ant=Nuevonodo;
Nuevonodo->sig = Paux->sig;
Nuevonodo->ant = Paux;
Paux->sig = Nuevonodo;
}
}
}
}
/*****************************************************************************************/
void EliminarElementoAgenda(nodoagenda *(&listad),int dni)
{
nodoagenda *actual = listad;
while (actual->dni != dni)
actual = actual->sig;
if (actual->ant == NULL) // Es el primer nodo de la lista
{
if (actual->sig!=NULL) // Hay mas de un nodo en la lista
actual->sig->ant=NULL;
listad=actual->sig;
}
else
{
if (actual->sig!=NULL) // Es el ultimo nodo de la lista
actual->sig->ant=actual->ant;
actual->ant->sig=actual->sig;
}
free(actual);
}
/*****************************************************************************************/
void MostrarInversoAgenda(nodoagenda *listad)
{
nodoagenda *paux=listad;
if (paux != NULL)
{
// Recorremos toda la lista hasta el final
while (paux->sig != NULL)
paux=paux->sig;
// Recorremos toda la lista en orden inverso hasta el primer nodo
while (paux != NULL)
{
printf("\n\nDNI: %d",paux->dni);
printf("\nNombre: %s",paux->nombre);
printf("\nApellidos: %s",paux->apellidos);
printf("\nDireccion: %s",paux->direccion);
paux=paux->ant;
}
}
}
/*****************************************************************************************/
void BorrarAgenda(nodoagenda *(&listad))
{
nodoagenda *paux;
while (listad != NULL)
{
paux=listad;
listad=listad->sig;
free(paux);
}
}
/*****************************************************************************************/
void GuardarAgenda(nodoagenda *listad)
{
nodoagenda *paux=listad;
FILE*pFile;
if (paux != NULL)
{
// Recorremos toda la lista hasta el final
while (paux->sig != NULL)
paux=paux->sig;
pFile = fopen ( "amigos.txt" , "wb" );//abrir fichero
if(pFile== NULL)
puts ("\nError guardando el fichero.");
else
{
// Recorremos toda la lista en orden inverso hasta el primer nodo
while (paux != NULL)
{
fwrite(&paux, sizeof paux, 1, pFile);
printf("\n\nDNI: %d",paux->dni);
printf("\nNombre: %s",paux->nombre);
printf("\nApellidos: %s",paux->apellidos);
printf("\nDireccion: %s",paux->direccion);
paux=paux->ant;
}
if( !fclose(pFile) )
printf( "Fichero Guardado\n" );
else
printf( "Error: Fichero NO Guardado\n" );
}
}
}
/*****************************************************************************************/
void LeerAgenda(nodoagenda *listad)
{
nodoagenda *Nuevonodo;
FILE *file = fopen("amigo.txt", "rb");
if ( file != NULL )
{
fclose(file);
}
}
