Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Carregar arquivo do disco para lista encadeada

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    C / C++ Carregar arquivo do disco para lista encadeada

    Boa noite, estou dificuldade para carregar um arquivo gravado em disco para uma lista duplamente encadeada.

    O código está assim:

    Código PHP:
    #include <stdio.h> 
    #include <stdlib.h> 

    typedef struct ListaEnc
       
    int codigo
       
    char nomeContato[20]; 
       
    struct ListaEnc *prox
       
    struct ListaEnc *ant
    }
    lista

    lista *criaLista(){ 
       return 
    NULL


    lista *insereElemento(lista *l){ 
       
    lista *NULL;  
       
    system("cls"); 
       
    printf(">> INSERCAO DE CONTATOS <<\n\n"); 
       
    = ((lista*) malloc(sizeof(lista))); 
       
    printf("CODIGO: "); 
       
    scanf("%d", &p->codigo); 
       
    printf("NOME: "); 
       
    setbuf(stdinNULL); 
       
    gets(p->nomeContato); 
       
    p->ant NULL
       
    p->prox l
        
       return 
    p;      


    void imprimeLista(listal){ 
       
    lista *p
       
    l
       
    system("cls"); 
       
    printf(">> CONSULTA DE CONTATOS <<\n"); 
       if (
    == NULL
          
    printf("LISTA VAZIA!"); 
       else{ 
           while(
    p){ 
              
    printf("\n\nCODIGO: %d",  p->codigo); 
              
    printf("\nNOME: %s"p->nomeContato); 
              
    p->prox
           } 
       } 


    void gravaArquivo(lista *l){ 
       
    FILE *arquivo
       
    lista *p
       
    l
        
       
    arquivo fopen("Contatos.txt""wb"); 
        
       if (
    == NULL){ 
          
    printf("\nNAO HA CONTATOS A SEREM GRAVADOS EM DISCO." 
                 "\nLISTA VAZIA!"
    ); 
       } 
       else{ 
          
    fwrite(&psizeof(lista), 1arquivo); 
          
    p->prox
       } 
      
    fclose(arquivo); 
      
    printf("\nDADOS GRAVADOS COM SUCESSO."); 


    listacarregaContatos(lista *l){ 
       
    FILEarquivo
       
    listap
        
       
    arquivo fopen("Contatos.txt","rb"); 
       
    rewind(arquivo); 
        
       while(!
    feof(arquivo)){ 
          
    l
          
    = (lista*) malloc(sizeof(lista)); 
          if ((
    fread(psizeof(lista), 1arquivo)) != 1) break; 
          
    p->prox
       } 
        
       
    fclose(arquivo); 
       return 
    l;  


    int main(){ 
       
    lista *minhaLista criaLista(); 
       
    int op
       
       do{ 
           
    system("cls"); 
           
    printf(">> MENU <<"); 
           
    printf("\n\n[1] - INSERIR CONTATOS" 
                  "\n[2] - EXCLUIR CONTATOS" 
                  "\n[3] - CONSULTAR CONTATOS" 
                  "\n[4] - GRAVAR CONTATOS EM DISCO" 
                  "\n[5] - CARREGAR OS CONTATOS PARA A MEMORIA"
    ); 
           
    printf("\n\nOPCAO: "); 
           
    scanf("%d",&op); 
            
           switch (
    op){ 
              case 
    1
                   
    minhaLista insereElemento(minhaLista); 
                   
    fflush(stdin); 
                   
    getchar(); 
                   break; 
              case 
    3
                   
    imprimeLista(minhaLista); 
                   
    fflush(stdin); 
                   
    getchar(); 
                   break; 
              case 
    4
                   
    gravaArquivo(minhaLista); 
                   
    fflush(stdin); 
                   
    getchar(); 
                   break; 
              case 
    5
                   
    carregaContatos(minhaLista); 
                   
    fflush(stdin); 
                   
    getchar(); 
                   break; 
           } 
        
       }while(
    op != 6); 
        
       
    fflush(stdin); 
       
    getchar(); 
       return 
    0

    Da forma que estou fazendo, a função não está carregando os dados do arquivo para a memória.

    Alguém poderia me ajudar nessa função?

    Alguns funções ainda não estão prontas, como a de remoção e consulta. Por serem mais simples, deixarei para fazer-las mais adiante.

    Grato.
X
Working...
X