Ler um arquivo txt e adicionar a uma lista encadeada em C

Este programa aborda dois recursos interessantes de se trabalhar com a linguagem C. A primeira delas é o uso de listas encadeadas, sendo muito úteis por diversos motivos. Primeiro, quando se utiliza um vetor, ele utiliza um espaço continuo de memória, e em caso de um array muito grande, isso pode ser um problema. Outra grande qualidade das listas, é o fato de ser muito simples manipular, além de ser uma tarefa bem tranquila concatenar diferentes listas. Outro recurso interessante é a manipulação de arquivos txt. Para isso, utilizamos um recurso muito semelhante aos famosos printf e scanf. Confira abaixo o programa:

#include <cstdlib>
#include <iostream>
#include <stdio.h>


typedef struct tlista{
        int n;
        tlista *prox;
};

tlista *lu_insereinicio(tlista *plst, int pn)
{
       tlista *aux;
       aux = (tlista*)malloc(sizeof(tlista));
       aux -> n = pn;
       aux -> prox = plst;
       return aux;
}

void lu_exibelista(tlista *plst)
{
     tlista *aux = plst;
     
     while (aux != NULL)
     {
           printf("%d, ", aux -> n);
           aux = aux -> prox;
     }
}

int main()
{
    int num; // ESTE É O NUMERO QUE SERÁ LIDO DO ARQUIVO E PASSADO PARA A LISTA
    tlista *list; // ESTOU CRIANDO A LISTA, NADA DE NOVO
    list = NULL;
    FILE *arquivo; // REFERENCIA DO ARQUIVO, SEMPRE QUE FOR UTILIZAR O ARQUIVO
                   // SERA REFERENDIDO-SE PELO arquivo
    arquivo = fopen("c:\\arq.txt","r"); // O FOPEN ABRE O ARQUIVO, NO CASO
                                        // É PASSADO POR PARAMETRO O ENDEREÇO
                                        // DO ARQUIVO, E O "r" SIGNIFICA QUE
                                        // O ARQUIVO ESTÁ SENDO ABERTO APENAS
                                        // PARA LEITURA
    
    if (arquivo) // CASO NAO TENHA DADO ERRO AO ABRIR O ARQUIVO
       {
           do
             {
                fscanf(arquivo,"%d",&num ); // O FSCANF É IDENTICO AO SCANF QUE
                                            // TODOS CONHECEM, PORÉM ELE É
                                            // UTILIZADO PARA LER DADOS DE
                                            // ARQUIVOS, E É PASSADO COMO
                                            // PARAMETRO, O PROPRIO ARQUIVO
                                            // QUE ESTA SENDO LIDO
                list = lu_insereinicio(list, num); // INSERE O NUMERO NA LISTA
             }while(!feof(arquivo)); // ELE PERCORRERÁ TODAS AS LINHAS DO ARQUIVO
                                     // ENQUANTO O ARQUIVO NAO CHEGAR AO FIM
                                     // FEOF = END OF FILE
         }
         
    lu_exibelista(list); // EXIBE A LISTA
    fclose(arquivo); // FECHA O ARQUIVO
    system("pause");
}

Anúncios

Um comentário sobre “Ler um arquivo txt e adicionar a uma lista encadeada em C

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s