Buenas a todos,
habra alguna alma caritativa que me resuelva la siguiente duda?
Lo que quiero hacer es grabar un árbol binario en un archivo, el árbol lo tengo listo, pero la parte de guardarlo en un archivo no tengo ni idea por donde comenzar.
asi va mi arbol
asi va el main
mi pregunta es como hago para guardar los datos en el archivo? se que tengo que abrir el archivo con fopen en modo añadir y luego utilizar la función fwrite(&r,sizeof(NODO),1,f); , pero lo que no entiendo es en donde aplicarlo?
por ejemplo si lo hago de esta manera, seria lo correcto?
o lo tengo que hacer en el main?
de igual manera para leer el archivo... así lo hago pero evidentemente no funciona
///funcion para mostrar los datos del arbol en orden.
habra alguna alma caritativa que me resuelva la siguiente duda?
Lo que quiero hacer es grabar un árbol binario en un archivo, el árbol lo tengo listo, pero la parte de guardarlo en un archivo no tengo ni idea por donde comenzar.
asi va mi arbol
Código (c) [Seleccionar]
typedef struct nodoarbol
{ //ESTRUCTURA DEL ARBOL
char placa[10];
int cedula;
char nombre[20];
char marca[15];
char modelo[15];
int año;
char color[10];
char serial_motor[20];
char email[25];
struct nodoarbol *izq;
struct nodoarbol *der;
}NODO;
asi va el main
Código (c) [Seleccionar]
int main()
{
NODO *raiz=NULL;
FILE *fichero;
if ((fichero=fopen(ARCHIVO,"rb+"))==NULL)
if ((fichero=fopen(ARCHIVO,"wb+"))==NULL)
{
printf("No se pudo abrir el archivo");
}
int ci=0,año;
char placa[10],placa2[10],placa3[10];
char nombre[20],marca[15],modelo[15];
char color[10],ser_motor[20],email[25];
int numero,opc,elim;
while(opc!=6)
{
printf("\n\t\t\tMENU PRINCIPAL\n\n\n");
printf("\t 1. INTRODUCIR VALORES\n");
printf("\t 2. LISTAR\n");
printf("\t 3. VER ARBOL\n");
printf("\t 4. BUSCAR PLACA\n");
printf("\t 5. ELIMINAR PLACA\n");
scanf("%d", &opc);
switch(opc)
{
case 1:
printf("Ingrese la PLACA:");
scanf("%s",placa);
printf("\nIngrese la CEDULA del Propietario:");
scanf("%d",&ci);
printf("\nIngrese el NOMBRE del Propietario:");
scanf("%s",nombre);
printf("\nIngrese la MARCA del auto:");
scanf("%s",marca);
printf("Ingrese la MODELO del auto:");
scanf("%s",modelo);
printf("Ingrese el año del auto:");
scanf("%d",&año);
printf("Ingrese el COLOR del auto:");
scanf("%s",color);
printf("Ingrese el SERIAL DEL MOTOR del auto:");
scanf("%s",ser_motor);
printf("Ingrese el EMAIL del propietario:");
scanf("%s",email);
insertanodonuevo(raiz,placa,ci,nombre,marca,modelo,año,color,ser_motor,email); ///inserto datos al arbol.
getch();
break;
case 2: printf("\n INORDEN:");
inorden(raiz);
break;
case 3: verArbol(raiz);
break;
case 4: printf("Ingrese la PLACA a BUSCAR:");
//gets(placa);
scanf("%s",placa2);
printf("ENCONTRADO? [%d]",buscar_nodo(raiz,placa2));
break;
case 5: printf("Ingrese la PLACA a ELIMINAR:");
//gets(placa);
scanf("%s",placa3);
eliminarElemArbol(raiz,placa3);
break;
}
}
fclose(fichero);
getch();
}
mi pregunta es como hago para guardar los datos en el archivo? se que tengo que abrir el archivo con fopen en modo añadir y luego utilizar la función fwrite(&r,sizeof(NODO),1,f); , pero lo que no entiendo es en donde aplicarlo?
por ejemplo si lo hago de esta manera, seria lo correcto?
Código (c) [Seleccionar]
void insertanodonuevo(NODO *&rarbol,char nuevo[],int ced,char nomb[],char marc[],char mod[],int año,char color[],char ser_motor[],char email[])
{ NODO r;
FILE *f;
if ((f = fopen(ARCHIVO, "a")) != NULL)
if(rarbol==NULL)
{
rarbol=(NODO*)malloc(sizeof(NODO));
if(rarbol!=NULL)
{
strcpy(rarbol->placa,nuevo);
strcpy(rarbol->nombre,nomb);
strcpy(rarbol->marca,marc);
strcpy(rarbol->modelo,mod);
strcpy(rarbol->color,color);
strcpy(rarbol->serial_motor,ser_motor);
strcpy(rarbol->email,email);
rarbol->cedula=ced;
rarbol->año=año;
rarbol->izq=NULL;
rarbol->der=NULL;
}
else
{
printf("\n**** Memoria No Disponible !!!!\n");
}
}
else
if(st(nuevo,rarbol->placa))
insertanodonuevo(rarbol->izq,nuevo,ced,nomb,marc,mod,año,color,ser_motor,email);
else
if(st(nuevo,rarbol->placa)
insertanodonuevo(rarbol->der,nuevo,ced,nomb,marc,mod,año,color,ser_motor,email);
else
printf("EL ELEMENTO YA EXISTE");
fwrite(&r,sizeof(NODO),1,f);
fclose(f);
}
o lo tengo que hacer en el main?
de igual manera para leer el archivo... así lo hago pero evidentemente no funciona
///funcion para mostrar los datos del arbol en orden.
Código (c) [Seleccionar]
void inorden(NODO *rarbol)
{
NODO r;
FILE *f;
if ((f = fopen(ARCHIVO, "rb")) != NULL)
fread(&r,sizeof(r),1,f);
while(!feof(f))
{
if(rarbol)
{
inorden(rarbol->izq);
printf("\n_________________________");
printf("\nPLACA: %s",rarbol->placa);
printf("\nNOMBRE PROPIETARIO: %s",rarbol->nombre);
printf("\nC.I PROPIETARIO: %d",rarbol->cedula);
printf("\nMARCA DEL AUTO: %s",rarbol->marca);
printf("\nMODELO DEL AUTO: %s",rarbol->modelo);
printf("\nANIO DEL AUTO: %d",rarbol->año);
printf("\nCOLOR DEL AUTO: %s",rarbol->color);
printf("\nSERIAL MOTOR DEL AUTO: %s",rarbol->serial_motor);
printf("\nEMAIL DEL PROPIETARIO: %s",rarbol->email);
printf("\n_________________________");
fread(&r,sizeof(NODO),1,f);
inorden(rarbol->der);
}
}
fclose(f);
}