Gelera to com duas duvidas nessa agenda em C utilizando lista simples encadeada,
• A função (void visualizarLista) quando pesquisa pelo nome, so esta encontrando o último nome cadastrado, os anteriores não, o que pode estar errado?
• Preciso implementar a EXCLUSÃO e INCLUSÃO de nó em QUALQUER PARTE DA LISTA.
o código esta anexado.
desde já agradeço
<code>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
struct stNo {
int info;
char nome[50];
char endereco[50];
char telefone[10];
char email[30];
char sexo;
struct stNo *prox;
};
struct stNo *cria_no() {
struct stNo *p;
if ((p = (struct stNo *) malloc(sizeof(struct stNo))) == NULL)
return NULL;
else {
p->prox = NULL;
return p;
}
}
void insereLista(struct stNo **list){
struct stNo *p,*q;
int n;
char name[50];
char end[50];
char tel[9];
char mail[30];
char sex;
fflush(stdin);
printf("\nDigite o valor do nó: ");
scanf("%i",&n);
fflush(stdin);
printf("\nDigite o nome: ");
gets(name);
fflush(stdin);
printf("\nDigite o endereço: ");
gets(end);
fflush(stdin);
printf("\nDigite o telefone: ");
gets(tel);
fflush(stdin);
printf("\nDigite o Email: ");
gets(mail);
fflush(stdin);
printf("\nDigite o sexo [M/F]: ");
scanf("%c",&sex);
if(*list==NULL){ //lista vazia
p = cria_no();
*list = p;
p->prox = NULL;
p->info = n;
strcpy(p->nome,name);
strcpy(p->endereco,end);
strcpy(p->telefone,tel);
strcpy(p->email,mail);
p->sexo = sex;
}
else{
p=*list;
while(p->prox!=NULL)
p=p->prox;// posiciona no final da lista
q = cria_no();
p->prox = q;
q->prox = NULL;
q->info = n;
strcpy(q->nome,name);
strcpy(q->endereco,end);
strcpy(q->telefone,tel);
strcpy(q->email,mail);
q->sexo = sex;
};
};
void mostraLista(struct stNo **list){
struct stNo *p;
if(*list!=NULL){
p=*list;
while(p->prox!=NULL){
printf(" %d->",p->info);
p = p->prox;
};
printf(" %d->",p->info);
}
else printf("\nLista Vazia");
};
void visualizarLista(struct stNo **list){
struct stNo *p;
char n;
char pesq[20];
fflush (stdin);
printf("\nDigite o nome: ");//procurar pelo nome
gets(pesq);
//scanf("%d",&n);
if(*list!=NULL){
p=*list;
while(p->prox!=NULL&&p->info!=n){
p = p->prox;
};
if(strcmp(p->nome, pesq) == 0){
printf("\nCódigo: %d",p->info);
printf("\nNome: %s",p->nome);
printf("\nEndereço: %s",p->endereco);
printf("\nTelefone: %s",p->telefone);
printf("\nEmail: %s",p->email);
printf("\nSexo: %c",p->sexo);
};
}
else printf("\nLista Vazia");
};
main(){
setlocale(LC_ALL,"Portuguese");
struct stNo *lista;
int menu;
lista = NULL; // inicializando a lista vazia
do{
system("cls");
printf("\n");
mostraLista(&lista);
printf("\n\n");
printf("[1-Inserir] ");
printf("[2-Visualizar] ");
printf("[3-Sair] ");
printf("Opção:");
scanf("%i",&menu);
switch(menu){
case 1 : insereLista(&lista);
break;
case 2 : visualizarLista(&lista);
break;
case 3 : printf("\nSaindo...");
break;
default: printf("\nCódigo Inválido");
}
printf("\n");system("pause");
}while(menu!=3);
}
<code>
agenda C .txt