Hola,
EL programa consiste en:
primero te pedira datos:
Nombre, y edad,
creara una lista encadenada, en funcion de que le digas
si o no.
Despues lo volcara a un archivo, "Agenda.dat", que se
creara automaticamente.
Pero despues no visualiza nada, y da error de ejecucion.
No se si quiera, si el programa carga los datos
introducidos al fichero qeu se crea...
Ayudazme, porfavor...
Codigo:
//////////////////////////////////////////////////////////
////////////
////// INCLUDES DEL
PROGRAMA ///////////
//////////////////////////////////////////////////////////
////////////
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
//////////////////////////////////////////////////////////
////////////
//////
TYPEDEF
//////////
//////////////////////////////////////////////////////////
////////////
typedef struct nodo * PUNT_NODO;
typedef char * PUNT_CHAR;
typedef FILE * FICHERO;
typedef struct
{
char nombre [20];
short edad;
}FICHA;
typedef struct nodo
{
FICHA info;
PUNT_NODO enlace;
}NODO;
//////////////////////////////////////////////////////////
////////////
////// PROTOTIPOS DE FUNCIONES
//////////
//////////////////////////////////////////////////////////
////////////
PUNT_NODO vuelca_fichero_a_lista (PUNT_CHAR nomfich);
PUNT_NODO crea_nuevo (FICHA elemento);
//void visualiza_info_lista (PUNT_NODO cabeza);
PUNT_NODO crea_lista (void);
FICHA pide_datos (void);
// Funcion de Salida
PUNT_NODO crea_nodo (PUNT_NODO cabeza, FICHA elemento);
void vuelca_lista_a_fichero (PUNT_NODO cabeza, PUNT_CHAR
nomfich);
/*********************************************************
************************/
////////// FUNCION
MAIN
///////////////
/*********************************************************
************************/
void main (void)
{
PUNT_NODO cabeza = (PUNT_NODO) NULL;
char nomfich [] = ("Agenda.dat");
vuelca_fichero_a_lista (nomfich);
//visualiza_info_lista (cabeza);
crea_lista ();
vuelca_lista_a_fichero (cabeza, nomfich);
}
/*********************************************************
************************/
///////// RESTO DE
FUNCIONES
///////////////
/*********************************************************
************************/
PUNT_NODO vuelca_fichero_a_lista (PUNT_CHAR nomfich)
{
FICHERO punt_fich;
PUNT_NODO cabeza, nuevo;
FICHA elemento;
cabeza = (PUNT_NODO) NULL;
if ((punt_fich = fopen (nomfich, "rb")) !=
(FICHERO) NULL)
{
while (fread(&elemento, sizeof(FICHA), 1,
punt_fich))
{
nuevo = crea_nuevo (elemento);
}
fclose (punt_fich);
}
return (cabeza);
}
/*********************************************************
***************************/
PUNT_NODO crea_nuevo (FICHA elemento)
{
PUNT_NODO nuevo;
nuevo = (PUNT_NODO)malloc(sizeof(NODO));
nuevo -> info = elemento;
nuevo ->enlace = (PUNT_NODO) NULL;
return (nuevo);
}
/*********************************************************
*************************
void visualiza_info_lista (PUNT_NODO cabeza)
{
PUNT_NODO recorre;
recorre = cabeza;
if (cabeza = (PUNT_NODO) NULL)
printf ("La lista esta vacia.");
else
{
puts (recorre -> info.nombre);
printf (" tiene %hd
años.", recorre ->info.edad);
recorre = cabeza ->enlace;
}
}
/*********************************************************
***************************/
PUNT_NODO crea_lista (void)
{
FICHA elemento;
PUNT_NODO nuevo, cabeza = (PUNT_NODO) NULL;
nuevo = crea_nodo (cabeza, elemento);
return (nuevo);
}
/*********************************************************
*************/
FICHA pide_datos (void)
{
FICHA nuevo;
printf ("Nombre: ");
fflush (stdin);
gets (nuevo.nombre);
printf ("Edad: ");
scanf ("%hd", &nuevo.edad);
return (nuevo);
}
/*******************************************/
PUNT_NODO crea_nodo (PUNT_NODO cabeza, FICHA elemento)
{
PUNT_NODO nuevo;
char respuesta;
do
{
nuevo = (PUNT_NODO)malloc(sizeof(NODO));
elemento = pide_datos ();
nuevo -> info = elemento;
nuevo -> enlace = cabeza;
cabeza = nuevo;
free (nuevo);
printf ("\tMas elementos? (S/N)");
}
while ((respuesta = getch ()) == 's' || respuesta
== 'S');
return (cabeza);
}
/*********************************************************
*/
void vuelca_lista_a_fichero (PUNT_NODO cabeza, PUNT_CHAR
nomfich)
{
FICHERO punt_fich;
PUNT_NODO viejo;
if((punt_fich = fopen (nomfich, "wb")) !=
(FICHERO) NULL);
{
while (cabeza != (PUNT_NODO) NULL)
{
fwrite(&cabeza -> info, sizeof
(FICHA), 1, punt_fich);
viejo = cabeza;
cabeza = cabeza -> enlace;
free (viejo);
}
fclose (punt_fich);
}
}
.
Leer las respuestas