Inserción de datos ABB con archivos

Iniciado por eduardo1012, 26 Octubre 2016, 23:11 PM

0 Miembros y 1 Visitante están viendo este tema.

eduardo1012

Tengo una duda al querer capturar los datos de un archivo y a la vez guardarlos en el árbol como podría hacerlo?
1
leche
20-12-2016
10
2
arroz
22/02/2017
8
3
Huevos
25/11/2016
8
4
frijoles
29/12/2017
12
5
maiz
31/03/2017
8
6
papas
20/03/2017
8
7
caramelos
08/09/2022
15
9
refresco
09/09/2019
18
10
harina
22/05/2018
11
Carne
10/04/2017

Esos son mis datos y mi código es:
Código (cpp) [Seleccionar]

typedef struct arbol{
    int id;
    char nombre;
    char fecha;
    int existencia;
    struct arbol *izquierda,*derecha;
}arbol;


int menu();
void captura();
main(){
arbol *raiz=NULL;
char op;
do{
op=menu();
switch(op){
case 1:captura();break;
case 2:printf("b");
case 3:break;
case 4:break;
case 5:break;
default:printf("Opcion invalida\n");system("pause");break;

}

}while(op!=5);


getch();
}

int menu(){
char op[2];
int opp;
system("cls");
printf("1.- Capturar arbol\n");
printf("2.- Imprimir arbol\n");
printf("3.- Actualizar existencias\n");
printf("4.- Status del producto\n");
printf("5.- Salir\n");
printf("Opcion: ");


validar_letras (op);
opp=atoi(op);
return opp;


}

void captura(){
FILE *fichero;
   fichero = fopen("150941_Aguilar_Av1-2.txt", "r");
   while(!feof(fichero)) fputc(fgetc(fichero), stdout);
   rewind(fichero);
   while(!feof(fichero)) fputc(fgetc(fichero), stdout);
   fclose(fichero);
   getchar();
   
}

eduardo1012

Código (cpp) [Seleccionar]
using namespace std;

typedef struct arbol{
    int id;
    char nombre[20];
    char fecha[10];
    int existencia;
    struct arbol *izquierda,*derecha;
};


arbol* insercion(arbol*,int,char[],char[],int);
char menu();
void captura(arbol*);
void inOrder(arbol *);
void mostrar(arbol*,int,char[],char[],int);
void validar_letras (char *p);
char getchass ();
void insert(int key, struct node **leaf);
main(){
arbol *raiz=NULL;
char op;
do{
op=menu();
switch(op){
case '1':captura(raiz);break;
case '2':
        printf("Inorden: ");
                    printf("%d",raiz->id);
//inOrder(raiz);
break;
case '3':break;
case '4':break;

}

}while(op!='5');
return 0;
}

char menu(){
char op;
system("cls");
printf("1.- Capturar arbol\n");
printf("2.- Imprimir arbol\n");
printf("3.- Actualizar existencias\n");
printf("4.- Status del producto\n");
printf("5.- Salir\n");
printf("Opcion: ");fflush(stdin);


op=getch();
printf("\n");
return op;


}

void captura(arbol *r){
arbol *raiz=NULL;
int i=1;
    int idd;
    char nombree[20];
    char fechaa[10];
    int existenciaa;

FILE *ptr;
ptr = fopen("150941_Aguilar_Av1-2.txt", "r");
   
   
    do{
fscanf(ptr,"%d",&idd);
    fscanf(ptr,"%s",nombree);
    fscanf(ptr,"%s",fechaa);
    fscanf(ptr,"%d",&existenciaa);
   
i++;     
insercion(raiz,idd,nombree,fechaa,existenciaa);
    }while(!feof(ptr));
fclose(ptr);   
printf("Registros guardados %d\n",i);

getchar();




   /*
   while(!feof(fichero)) fputc(fgetc(fichero), stdout);

   fclose(fichero);
   getchar();*/
   
}
arbol* insercion(arbol *r,int id,char nombre[20],char fecha[10],int existencia){   

    if(r==NULL)
    {
        r=(arbol*)malloc(sizeof(arbol));
        r->id=id;
        strcpy(r->nombre,nombre);
        strcpy(r->fecha,fecha);
        r->existencia=existencia;
        r->izquierda=NULL;
        r->derecha=NULL;
        return r;
    }
    else
    {
        if(r->id > id)
            r->izquierda = insercion(r->izquierda,id,nombre,fecha,existencia);
        else
            r->derecha = insercion(r->derecha,id,nombre,fecha,existencia);

   
}
}

void inOrder(arbol *r){
    if(r!=NULL){
        inOrder(r->izquierda);
        printf("%d -> ",r->id);
        inOrder(r->derecha);
    }
    getch();

}


Trate de hacer distinto el codigo, se supone que ya esta dentro del arbol, pero a la hora de mostrar lo que hay en el no me corre, alguien puede detectar mi error?
O la manera en que estoy guardando los datos en el arbol es incorrecto y en lugar de hacerlo mediante fichero, hacerlo manualmente?