bake Postado Setembro 2, 2010 Denunciar Share Postado Setembro 2, 2010 (editado) E ai galera...Estou tendo alguns problemas, o programa é o seguinte(em C). Ler um arquivo txt, e inserir os valores do arquivos em uma lista encadeada... Podendo depois remover da lista ou inserir na lista...Quem poder ajudar, posta ai... Grato... Editado Setembro 2, 2010 por bake Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ce1o2e Postado Setembro 2, 2010 Denunciar Share Postado Setembro 2, 2010 (editado) você pode postar o codigo para que possamos analisar ? Editado Setembro 2, 2010 por ce1o2e Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 bake Postado Setembro 2, 2010 Autor Denunciar Share Postado Setembro 2, 2010 Achei esse codigo, q faz tudo certinho ler do txt e grava na lista. Agora preciso de uma função inserir e remover para essa lista... para fazer o menu.#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("\n%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("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 não 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 não CHEGAR AO FIM // FEOF = END OF FILE } lu_exibelista(list); // EXIBE A LISTA fclose(arquivo); // FECHA O ARQUIVO printf("\n"); system("pause"); } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ce1o2e Postado Setembro 2, 2010 Denunciar Share Postado Setembro 2, 2010 (editado) poderia explicar melhor como e esse inserir e remover ?você ta falando inserir no programa e deletar do arquivo ? Editado Setembro 2, 2010 por ce1o2e Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 bake Postado Setembro 2, 2010 Autor Denunciar Share Postado Setembro 2, 2010 Estou usando o Dev, e salvando normal ".cpp".O programa só precisa do arquivo para inserir os valores na lista... depois você tem q trabahar com a lista só.Inserir na lista mesmo, qualquer lugar dela, e remover do inicio ou fim, tanto faz..Grato... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ce1o2e Postado Setembro 2, 2010 Denunciar Share Postado Setembro 2, 2010 (editado) pelo que estou vendo você quer cria uma funcão inserir e outra remove você pode fazer o inserir com o fgets (para enviar string para o arquivo) apos digitar uma mensagem vai ser salvo dentro do arquivo já o remove você pode simplismente deleta o arquivo.txt e recriar o arquivonão vou postar codigos de exemplo por que estou sem tempo para escrever já vou sair desculpe ... Editado Setembro 2, 2010 por ce1o2e Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 == Douplus == Postado Setembro 2, 2010 Denunciar Share Postado Setembro 2, 2010 (editado) pelo que estou vendo você quer cria uma funcão inserir e outra remove você pode fazer o inserir com o fgets (para enviar string para o arquivo) apos digitar uma mensagem vai ser salvo dentro do arquivo já o remove você pode simplismente deleta o arquivo.txt e recriar o arquivonão vou postar codigos de exemplo por que estou sem tempo para escrever já vou sair desculpe ...Se eu entendí bem, o que o bake quer é inserir e remover elementos da lista que está na RAM, depois que ela foi carregada... Não deixou a entender que queria atualizar o arquivo.A função de inserção no início já está implementada no código que você postou. Enquanto as funções de inserção nas demais posições você vai precisar de uma repetição que acontece até que a posição que se deseja seja encontrada. Se o elemento procurado for o último, a condição da repetição é semelhante a esta:while (aux->next != NULL) { aux = aux->prox; } // deixando [i]aux[/i] apontando para o último nó da lista. Alternativamente, você pode fazer a função de inserção ser recursiva ao invés de usar o while, a função chamará a sí mesma passando como parâmetro o próximo nó da lista enquando seu ponteiro prox apontar para algo diferente da condição de repetição. Finalmente, a inserção pode ser feita com: tlista *aux2; aux2 = (tlista *)malloc(sizeof(tlista)); aux2->prox = aux->prox; aux2->n = numeroDesejado; aux->prox = aux2; Enquanto às remoções: // REMOÇÃO NO MEIO E NO FIM DA LISTA: // aux é ponteiro para uma posição imediatamente antes da posição do elemento a ser retirado aux2 = aux->prox; // aux2 = nó a ser retirado aux->next = aux2->prox; // remove o nó free(aux); // REMOÇÃO NO COMEÇO DA LISTA: aux = ponteiroDaLista; // sendo ponteiroDaLista o ponteiro para o primeiro elemento da lista ponteiroDaLista = ponteiroDaLista->prox; // retira o elemento free(aux); // libera a memória do elemento retiradoA busca por um elemento através de seu índice pode ser feita de modo similar ao que mostrei para inserção.Céus, espero que não tenha ficado confuso! Editado Setembro 2, 2010 por == Douplus == Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ce1o2e Postado Setembro 2, 2010 Denunciar Share Postado Setembro 2, 2010 hum estava no centro acabei de voltar acho que não vou precisar colocar um exemplo mais se quiser so fala eu faço ... mais ate agora não entendi esse inserir e remover .... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 bake Postado Setembro 2, 2010 Autor Denunciar Share Postado Setembro 2, 2010 Seguinte, o algoritmo q eu deixei, está fazendo o seguinte, ler o arquivo e insere os dados do arquivos na lista.No txt tinha: 1,2,3,4,5, ele grava 1,2,3,4,5 na lista.Agora esquece o arquivo, tenho q trabalhar com a lista, cria um menu pra inserir mais dados na lista, e um remover, tanto faz no inicio ou final da lista. == Douplus ==Eu entendi, estou tentando colocar isso no codigo acima...ce1o2eEntendeu? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ce1o2e Postado Setembro 2, 2010 Denunciar Share Postado Setembro 2, 2010 (editado) sim já tenho uma ideia ... add eu no MSN para te ajudar ... Editado Setembro 2, 2010 por ce1o2e Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 == Douplus == Postado Setembro 2, 2010 Denunciar Share Postado Setembro 2, 2010 Douglas? Eu? Assembly? Não?Mas acho que entendí por que você disse isso... Eu tinha escrito "pilha" sem querer num comentário, foi isso? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 bake Postado Setembro 3, 2010 Autor Denunciar Share Postado Setembro 3, 2010 RESOLVIDO.ce1o2e, desenvolveu o algoritmo, depois edito e posto o codigo. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
bake
E ai galera...
Estou tendo alguns problemas, o programa é o seguinte(em C). Ler um arquivo txt, e inserir os valores do arquivos em uma lista encadeada... Podendo depois remover da lista ou inserir na lista...
Quem poder ajudar, posta ai...
Grato...
Editado por bakeLink para o comentário
Compartilhar em outros sites
11 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.