Ir ao conteúdo
  • Cadastre-se
Igor Vargas

C Lista encadeada passando uma String

Recommended Posts

Olá estou com um problema onde preciso passar algumas informações e na hora do printa ele esta duplicando a string. Minha dúvida é como eu passo strings para uma lista encadeada. Pois quando eu mando a primeira string ele vai normal mas quando eu adiciono outra pessoa ele muda o nome da pessoa anterior para o nome que foi digitado.

 

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAM 50

typedef struct CONTATO{
	char *nome;
	char *sobrenome;
	int numeroT;
	char *email;
	struct CONTATO *prox;
	struct CONTATO *inicial;
	
}contato;


contato *inserir(char *nome,char *sobrenome,char *email, int numero, contato *c){
	contato *novo;
	novo = (contato*)malloc(sizeof(contato));
	novo->nome = nome;
	novo->sobrenome=sobrenome;
	novo->email=email;
	novo->numeroT=numero;
	novo->prox = c;
	return novo;
}


void ordenar(contato *l) {
 
    if(l == NULL || l->prox == NULL) return; //se for nulo(vazio), ou apenas 1 elemento
    contato *aux = l;
    contato *t;
    char s[100]; //precisa de espacao suficiente para armazenar o nome
 
    while(aux != NULL) {
      t = aux->prox;
      while(t != NULL) {
        if(strcmp(aux->nome, t->nome) > 0) { //se vir depois
            strcpy(s, aux->nome);
            strcpy(aux->nome, t->nome);
            strcpy(t->nome, s);
        }
        t = t->prox;
      }
      aux = aux->prox;
    }
}




contato *l;
l = NULL;
char nome[TAM];
char sobrenome[TAM];
char email[TAM];
int numero;
		printf("_______________________\n");
		printf("Bem-Vindo a Sua Agenda\n");
		printf("_______________________\n");
		//printf("\n");
int escolha;

do{
printf("1: Adicionar contato\n");
printf("2: Remover Contato\n");
printf("3: Exibir Contatos\n");
printf("4: Favoritos\n");
printf("5: Sair\n");

printf("_______________________\n");
printf("Escolha a Opcao Desejada: ");
scanf("%d",&escolha);


switch(escolha){
	
	case 1:
	printf("_______________________\n");
	printf("voce Selecionou Adicionar Contato\n");
	printf("_______________________\n");	
	printf("Nome do Contato: ");	
	fflush(stdin);
	gets(nome);
	printf("Sobrenome do Contato: ");
	gets(sobrenome);
	fflush(stdin);
	printf("email do contato: ");
	gets(email);
	printf("Numero de Contato: ");
	scanf("%d",&numero);
	l =inserir(nome,sobrenome,email,numero,l);
	//ordenar(l);	
	break;
	
	case 2:
	
	break;	
	
	case 3:
	imprime(l);
	break;
	
	case 4:
		
	break;
	
	default:
		printf("Fim do Programa");
	break;
	
	
	
	
}
	}while(escolha != 5);	
	
	
	
}

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Igor Vargas Olá. A dica que eu daria seria definir sua struct dessa forma:

typedef struct CONTATO {
    char nome[50];
    char sobrenome[50];
    int numeroT;
    char email[50];
    struct CONTATO *prox;
    struct CONTATO *inicial;
} contato;

E aí na função inserir usar a função strcpy:

strcpy(novo->nome, nome); // por exemplo

Vê se resolve o problema

 

Obs: Cara, só evite usar o comando gets para ler uma string. Use o fgets ou mesmo o scanf.

O comando gets é considerado um comando perigoso!

  • Curtir 1
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@giu_d Fiz de outra forma mas desse jeito tb da certo. valeu pela ajuda

adicionado 7 minutos depois

@giu_d Se puder me ajudar em outra dúvida. Preciso fazer uma lista encadeada apontar para outra. Por exemplo. A pessoa digita o nome dela e eu pegarei a primeira letra do nome dela que ficará numa outra lista e irei apontar para essa lista que contem os nomes das pessoas. Estou fazendo de uma maneira que talvez não seja a certa. O problema que eu n sei como apontar uma lista para outra .

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Igor Vargas Olá. Daria para postar o código. Não vejo problemas em postar o código aqui pois você é o autor do tópico :thumbsup:

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×