With making a list point to another in C

0

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;  
    }
}
    
asked by anonymous 22.09.2018 / 03:28

0 answers