Ir para conteúdo
Fórum Script Brasil
  • 0

foef e lista encadeada


MarcosAMS

Pergunta

Boa Noite

Estou criando uma agenda telefonica com lista encadeada, eu tenho que inserir, imprimir na tela, localizar e modificar, localizar e remover, gerar txt e improtar txt, o meu problema é o seguinte, eu consigo gerar o txt mas na hora de importar que está o problema, no caso minha struct tem nome sobrenome e telefone, quando eu insiro os dados e crio um txt, na hora de importar ele lista meu contato e embaixo um contato com um monte de lixo de memoria se eu crio um txt com mais de 1 contato salva na hora de importar dai viara uma bagunça, estou o dia todo nisso, não sei mais o que fazer. Segue o codigo (Obrigado):

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>

struct agenda
{
int id;
char nome [20];
char snome [20];
int tel;
struct agenda *prox;
};

struct agenda *p=NULL;
struct agenda *topo=NULL;
struct agenda *fim=NULL;
struct agenda *aux=NULL;
int opcao;
int codid,loc;
char insert;


int importar ();

int main ()
{





while (opcao!=6)
{
printf ("Menu \n");
printf ("[1]-Inserir\n");
printf ("[2]-Listar Todos\n");
printf ("[3]-Alterar\n");
printf ("[4]-Gerar arquivo\n");
printf ("[5]-Carregar Arquivo\n");

scanf ("%d",&opcao);

switch (opcao)
{
case 1:
{
printf ("1- Cadastrar Contato [s/N]\n");
scanf ("%s",&insert);
while (insert=='S'|| insert =='s')
{
p=(struct agenda*)malloc(sizeof(struct agenda));
if(p!=NULL);
{
codid++;
p->id=codid;
printf ("Digite o Nome: ");
scanf("%s",&(p->nome));
printf ("\n");
printf ("Digite o Sobrenome: ");
scanf("%s",&(p->snome));
printf ("\n");
printf ("Digite o Telefone: ");
scanf ("%d",&(p->tel));
printf ("\n");
p->prox=NULL;
if (topo==NULL)
topo=p;
else
fim->prox=p;
fim=p;
printf ("Cadastrar outro contato [s/N]\n");
scanf ("%s",&insert);
}
}
break;
}

case 2:
{
aux=topo;
while (aux)
{
printf("\n");
printf("Cadastro %d : Contato: %s %s - ",aux->id,aux->nome,aux->snome);
printf("Telefone %d",aux->tel);
aux=aux->prox;
printf ("\n");
}
break;
}
case 3:
{
printf ("Para localizar digite Numero do Cadastro:");
scanf ("%d",&loc);

aux=topo;

while (aux)
{
if(aux->id==loc)
{
printf("Contato: %s %s - ", aux->nome,aux->snome);
printf("Telefone %d ",aux->tel);
printf("\n");
printf ("Mudar o Nome: ");
scanf("%s",&p->nome);
printf ("\n");
printf ("Mudar o Sobrenome: ");
scanf("%s",&p->snome);
printf ("\n");
printf ("Telefone o Telefone: ");
scanf ("%d",&p->tel);
printf ("\n");
}
else
{
printf ("Contato não Localiazado\n");
}
aux=aux->prox;
}
break;
}
case 4:
{
FILE *FPTR;
FPTR = fopen ("agenda.txt","a");
aux=topo;

while (aux)
{
fprintf(FPTR,"%s\t",p->nome);
fprintf(FPTR,"%s\t",p->snome);
fprintf(FPTR,"%d\t",p->tel);
aux=aux->prox;
}
fclose(FPTR);
printf("Contato(s) Salvos");
break;
}
case 5:
{
FILE *FPTR = fopen("agenda.txt", "r");
if(FPTR==NULL)
printf("Ainda não Existe Arquivo de Contatos\n");
else
{
do
{
p=(struct agenda*)malloc(sizeof(struct agenda));
if(p!=NULL);
{
codid++;
p->id=codid;
fscanf(FPTR,"%s",&(p->nome));
fscanf(FPTR,"%s",&(p->snome));
fscanf (FPTR,"%d",&(p->tel));

p->prox=NULL;
if (topo==NULL)
topo=p;
else
fim->prox=p;
fim=p;
}
} while (!feof(FPTR));

}
fclose(FPTR);
printf ("Arquivo Importado\n");
break;
}
default:
{
printf("Comando invalido\n");
}

}
}

}

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...