I'm in doubt as to how my LETRAS
list points to CONTATO
. Every time I type a new name I need to save the initial of the name and point it to the names that contain the initial one, but I'm having trouble implementing it.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "agenda.h"
#define TAM 50
main()
{
contato* l;
letras* c;
l = NULL;
c = 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("\n");
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);
c = insereChar(l, c);
ordenar(l);
break;
case 2:
break;
case 3:
imprime(l, c);
break;
case 4:
break;
default:
printf("Fim do Programa");
break;
}
} while (escolha != 5);
}
Here the file agenda.h
:
#define TAM 50
#define MAX 500
typedef struct CONTATO{
char *nome;
char *sobrenome;
int numeroT;
char *email;
struct CONTATO *prox;
struct CONTATO *proxContato;
}contato;
typedef struct LETRAS{
char inicial;
struct LETRAS *prox;
struct LETRAS *proxLetra;
}letras;
contato *inserir(char *nome,char *sobrenome,char *email, int numero, contato *c){
contato *novo;
novo = (contato*)malloc(sizeof(contato));
novo->nome =(char *)malloc(strlen(nome)+1);
strcpy(novo->nome,nome);
novo->sobrenome=(char *)malloc(strlen(sobrenome)+1);
strcpy(novo->sobrenome,sobrenome);
novo->email=(char *)malloc(strlen(email)+1);
strcpy(novo->email,email);
novo->numeroT=numero;
novo->prox = c;
return novo;
}
letras *insereChar(contato *c,letras *l){
letras *novo;
novo = (letras*)malloc(sizeof(letras));
char teste[TAM]= c->nome;
char i = tes[0];
novo->inicial = i;
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[MAX]; //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;
}
}
void imprime(contato *c, letras *l){
contato *p=c;
letras *t=l;
while(p!=NULL && t!=NULL){
//printf("\n");
printf("%c-> %s %s\n",t->inicial,p->nome,p->sobrenome);
t =t->prox;
p=p->prox;
}
}