Help with list and file

Asked

Viewed 175 times

1

Well, I need to pass a chained list to a file and I did a function for it but I can’t. Besides I’ve done several tests and I couldn’t.

#include <stdio.h>
#include <stdlib.h>
typedef struct celulaLista {
int informacao;
struct celulaLista *proximo;
} celula;

int main() {
celula *pLista;
int opcao = 0;
void initLista(celula **pRecebido);
void insertLista(celula **pRecebido);
void buscaListaSimples(celula **pRecebido);
void removeElementoListaSimples(celula **pRecebido);
void salva(celula **pRecebido);
int leValor(int *valorRecebido);
pLista = (celula *)malloc(sizeof(struct celulaLista));
initLista(&pLista);
for(;;) {
    printf("\n1 - Inserir  ");
    printf("\n2 - Consultar ");
    printf("\n3 - Remover");
    printf("\n4 - Salvar em Arquivo");
    printf("\n5 - Sair \n ");
    scanf("%d", &opcao);
    opcao = leValor(&opcao);
    switch(opcao) {
        case 1:
            insertLista(&pLista);
            break;
        case 2:
            buscaListaSimples(&pLista);
            break;
        case 3:
            removeElementoListaSimples(&pLista);
            break;
        case 4:
            salva(&pLista);
             break;
        case 5:     
            exit(0);
         }
    }
    return 0;
 }
void initLista(celula **pRecebido) {
(*pRecebido)->proximo = NULL;
}
void insertLista(celula **pRecebido) {
celula *temporario;
int valor;
printf("\nInforme um Valor a ser Inserido : ");
scanf("%d", &valor);
temporario = (celula *)malloc(sizeof(celula));
temporario->informacao = valor;
temporario->proximo = (*pRecebido)->proximo;
(*pRecebido)->proximo = temporario;

}
void buscaListaSimples(celula **pRecebido) {
celula *temporario;
if((*pRecebido)->proximo == NULL) {
    printf("Lista Vazia!\n");
} else {
    temporario = (celula *)malloc(sizeof(celula));
    temporario = (*pRecebido)->proximo;
    while(temporario != NULL) {
        printf("Valor : %d\n", temporario->informacao);
        temporario = temporario->proximo;
    }
  }
}
void removeElementoListaSimples(celula **pRecebido) {
celula *temporario;
if((*pRecebido)->proximo == NULL) {
    printf("\nLista Vazia!");
} else {
    temporario = (*pRecebido)->proximo;
    (*pRecebido)->proximo = temporario->proximo;
    free(temporario);
}
}
int leValor(int *valorRecebido) {
while((*valorRecebido > 4) || (*valorRecebido < 1)) {
    printf("Opcao Invalida. Informe novamente : \n");
    scanf("%d", &(*valorRecebido));
}
return(*valorRecebido);
}
void salva(celula **pRecebido){
celula *temporario;

FILE *arquivo;
arquivo = fopen("Arquivo.txt", "w");
if(arquivo == NULL){
    printf("Erro na abertura do arquivo!");
}
 else{
 }
 fclose(arquivo);
 printf("Salvo com Sucesso");
 }
  • Just missing smoke to save,.

  • What happens when you run the save function?

  • It’s kind of like the buscaListaSimples(). You have to go through the whole list and save to the file.

1 answer

1

You can do as in this code below, passing to the function the first node/cell of the linked list

 void salva(celula *c){
    FILE *arquivo = NULL;
    celula *p = c;
    arquivo = fopen("Arquivo.txt","w");
    if(arquivo == NULL){
       printf("Erro na abertura do arquivo\n")
       return;
    }
    while(p){
       fprintf(arquivo,"%d\n",p->informacao);
       p = p->proximo;
    }
    fclose(arquivo);
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.