Ir ao conteúdo

Posts recomendados

Postado

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
Postado

@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!

Postado

@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 1
Postado

@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:

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!