Jump to content
Sign in to follow this  
Maradona101

leitura do ficheiro binário para a árvore binária

Recommended Posts

Maradona101

Boas, quero ler os dados guardados num ficheiro binário para uma árvore binária, para isso uso o seguinte código.

  FILE * fp;
      fp = fopen ("C:\\Binario.dat", "rb");
       if (fp == NULL) {
       printf ("Erro ao abrir o arquivo.\n");
       exit(1);
}
         while(fread(&raiz,sizeof(raiz),1,fp)){

                  printf(raiz->nome);

                 }
                   fclose(fp);

este código não funciona, ao executá-lo indentifica uma falha de segmentação. Agradecia ajuda.

Obrigado.

Share this post


Link to post
Share on other sites
Maradona101

Eu disse no 1º post o objectivo do código, passar os dados guardados no ficheiro para uma árvore binária de forma a manipulá-los em pesquisas.

Share this post


Link to post
Share on other sites
Maradona101

Entretanto com ajuda do professor cheguei a esta versão do código.

    void imprime(){  
          int NR_REG = 1000;
              FILE * fp;
      fp = fopen ("C:\\Binario.dat", "rb");
       if (fp == NULL) {
       printf ("Erro ao abrir o arquivo.\n");
       exit(1);
       }
        
      raiz = (Telefones*) calloc (NR_REG,sizeof(Telefones));
      fread(raiz, sizeof(Telefones),NR_REG,fp);
                  printf("Nome: %s\n", raiz->nome);

                   fclose(fp);
            }
                

No entanto nesta linha de código,

      raiz = (Telefones*) calloc (NR_REG,sizeof(Telefones));

dá me o seguinte erro,

syntax error before ')' token

Share this post


Link to post
Share on other sites
Localhost

Tens a certeza que dá erro nessa linha? Que estranho. Já é um bocado tarde e eu posso estar a ver mal mas posta aí o código todo para poder compilar.


here since 2009

Share this post


Link to post
Share on other sites
Maradona101

    #include <stdio.h>     
    #include <string.h>     
    #include <stdlib.h>
    #define NR_REG 1000
    
    
        
    
   typedef struct Telefones {    
        struct Telefones *esq, *dir;  
        int Telefone;       
        char nome[30];    
        int NPorta;
        int codPostal;     
        } Telefones;
        Telefones* raiz = NULL;
        Telefones* aux = NULL;       
          
         
    typedef struct Telefones *arvore_ptr; 
     
    
        
    //prototipos para passar para o outro arquivo    
    void Inserir (arvore_ptr*, int, char[], int, int);     
    void Pesquisar (arvore_ptr, int);     
      /////
       void imprime(){ 
              FILE * fp;
      fp = fopen ("C:\\Binario.dat", "rb");
       if (fp == NULL) {
       printf ("Erro ao abrir o arquivo.\n");
       exit(1);
       }
       
      raiz = (Telefones*) calloc (NR_REG,sizeof(Telefones));
      fread(raiz, sizeof(Telefones),NR_REG,fp);
   
                  printf("Nome: %s\n", raiz->nome);

                   fclose(fp);
                   
            } 
    //   
    /*int c = codigo char n[] = nome[30] float preco = p*/    
    void Inserir (arvore_ptr *pai, int t, char n[], int p, int cp) {    
        if ((*pai)) {     
            if (t < (*pai) -> Telefone)    
               Inserir(&((*pai) -> esq), t, n, p, cp);     
            else    
               Inserir(&((*pai) -> dir), t, n, p, cp);    
        }    
        else {     
            (*pai) = (arvore_ptr) malloc (sizeof (struct Telefones));     
                if (*pai) {     
                      (*pai) -> Telefone = t;     
                       strcpy((*pai) -> nome, n);    
                      (*pai) -> NPorta = p;    
                      (*pai) -> codPostal = p;
                      (*pai) -> esq = NULL;     
                      (*pai) -> dir = NULL;    
                }    
            }
            
    }    
    
    void InserirFicheiro () { 
           FILE *fp;    
       fp = fopen ("C:\\Binario.dat", "ab"); //wb para escrita //rb para leitura    
       if (fp == NULL) {    
          printf ("Erro ao abrir o arquivo.\n");    
          exit(1);    
       }    
       else {    
       //if (fp != NULL) {}    
       printf ("Guardado");     
       fwrite(&raiz, sizeof(raiz), 1, fp);    
       fclose (fp);  
       
       }    
       }
       
       
       
       void InserirGlobal(arvore_ptr *pai, int t, char n[], int p, int cp){
            Inserir(pai, t, n, p,cp);
            InserirFicheiro();
            }
        
    void Pesquisar (arvore_ptr raiz, int t) {    
        if (raiz) {    
            if (t == raiz-> Telefone) {     
                printf("Telefone = %d\n", raiz -> Telefone);    
                printf("nome = %s\n", raiz -> nome);    
                printf("NPorta %d = %.2f\n", raiz -> NPorta);
                printf("CodPostal %d = %.2f\n", raiz -> codPostal);    
            
                aux = raiz;     
                return;    
            }     
            else {    
                if (t < raiz -> Telefone)    
                    Pesquisar(raiz -> esq, t);     
                else    
                    Pesquisar(raiz -> dir, t);    
                 }    
        }    
    }    
        
   
      
    /*Função reponsavel por exibir o conteudo do arquivo .dat*/  
      
  
    int main() {    
        int opcao =1;     
        int entrada;    
        char nome1[30];    
        int np; 
        int cp;   
        char temp[30];   
             
            while(opcao!=0) {       
                      
                  printf("|________________________|\n\n\n\n");    
                  printf("=====>Menu<=====\n");    
                  printf("________________\n");    
                  printf("1-->Inserir\n");    
                  printf("2-->Pesquisar\n");     
                              printf("5-->Imprimir Texto\n");    
                  printf("0-->Sair        \n");    
                  printf("________________\n");       
                  printf("Opcao:");    
                   scanf("%d%*c", &opcao);    
                             
        switch(opcao)    
          {    
              case 1:{    
                       printf("\nDigite o telefone: ");     
                       gets(temp);    
                                   entrada = atoi(temp);    
            
                       printf("digite o nome: ");    
                       gets(nome1);    
            
                       printf("digite o n Porta: ");    
                       gets(temp);    
                       np = atoi(temp); //string para float  
                       
                       printf("digite o cod Postal: ");    
                       gets(temp);    
                       cp = atoi(temp); //string para float  
                         
                       InserirGlobal(&raiz,entrada, nome1, np, cp);    
                       break;    
                       }    
                       
              case 2:{    
                       printf("\nDigite o codigo: ");     
                       gets(temp);    
                       entrada = atoi(temp); //string para int    
                       Pesquisar(raiz,entrada);     
            
                         if (aux) {    
                            printf("\n %d Existe na arvore\n",entrada);     
                         }    
                         else    
                            printf("\n %d Nao existe na arvore",entrada);     
                       break;    
                       }    
                  
             
              
              case 5:{  
                   imprime();  
                   break;  
                   }         
          }     
       } 
       }

Fiz umas alterações e já compila, mas dá mal...

Share this post


Link to post
Share on other sites
Localhost

Bem me parecia que aquela linha não tinha nenhum problema. "Dá mal", como assim?


here since 2009

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.