Código de agenda em C[Resolvido]
O código é para a colocar 3 letras a partir de 3 nomes diferentes. Ou seja:A-> AdrianoB-> BrunoC->CarolCom isso eu criaria uma agenda.Problema**1-Ao eu compara o que tem dentro da letra que como não tem nada seria NULL então ele nem entra no casso que ele é igual a NULL2- Ao receber a posição da outra struct em: aux2=aux->pontpnome, ou seja ele recebe de dentro da struct letras a posição da próxima struct que é de nomes. Ao debuggar ele insinua erro ai também.Caso vejam mais um erro por favor me comuniquem.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define tamanho 3
typedef struct nomes vetnome;
typedef struct letras letra;struct nomes{
char nome[30];
vetnome *pont;
};struct letras{
char L[4];
vetnome *pontpnome;
};
void inserir (letra **let, letra tabEsp[tamanho], vetnome **ini,int qtd);
int chave(char nome[30]);int main()
{
int qtd=0,i=0;
char nome[30], resposta[30];
letra tabEsp[tamanho];
for(i=1;i<4;i++){
strcpy(tabEsp.L,"NULL");
}
printf("Insira 3 nomes diferentes primeiramente: ");while(qtd<4)
{
letra *let=(letra *)malloc(sizeof(letra));
vetnome *ini=(vetnome *)malloc(sizeof(vetnome));
let->pontpnome=NULL;
ini->pont=NULL;
inserir(&let, tabEsp, &ini, qtd);
system("pause");
system("cls");
qtd++;
}
puts("Aqui você irá colocar nomes dentro das 3 listas criadas! :)");while(resposta!="NAO")
{
printf("Digite um nome: ");
scanf("%s", &nome);
letra *let=(letra *)malloc(sizeof(letra));
vetnome *ini=(vetnome *)malloc(sizeof(vetnome));
let=NULL;
ini=NULL;
inserir(&let, tabEsp, &ini, qtd);
printf("Você quer continuar?[Sim/Nao]");
scanf("%s", &resposta);
system("pause");
system("cls");
}
return 0;
}int chave(char nome[30])
{
unsigned int resultado= (int)nome[0]%tamanho;
if(resultado<0)
resultado=-resultado;
return resultado;
}void inserir (letra Let, letra tabEsp[tamanho], vetnome Ini, int qtd)
{
char nome[30];
puts("Digite um nome: ");
scanf("%s", &nome);
int chaveres=chave(nome);
vetnome *aux2;
aux2=Ini;
letra *aux;
aux=Let;
if(chaveres==1){
if(tabEsp[chaveres].L=="NULL")
{
letra *novo= (letra*) malloc(sizeof(letra));
vetnome *name=(vetnome *)malloc(sizeof(vetnome));
strcpy(novo->L,nome[0]);
strcpy(name->nome,nome);
aux=novo;
aux2=name;
aux->pontpnome=&aux2;
aux2->pont=NULL;
return ;} else
if(tabEsp[chaveres].L!="NULL")
{
aux2=aux->pontpnome;
while(aux2!=NULL)
{
aux2=aux2->pont;
}
vetnome *name=(vetnome *)malloc(sizeof(vetnome));
strcpy(name->nome,nome);
aux2->pont=name;
name->pont=NULL;
return;
}
}
if(chaveres==2){
if (tabEsp[chaveres].L==NULL)
{
letra *novo=(letra *)malloc(sizeof(letra));
vetnome *name=(vetnome *)malloc(sizeof(vetnome));
strcpy(novo->L,nome[0]);
strcpy(name->nome,nome[30]);
aux=novo;
aux2=name;
aux->pontpnome=&aux2;
return;
} else if(tabEsp[chaveres].L!=NULL){
aux2=aux->pontpnome;
while(aux2!=NULL)
{
aux2=aux2->pont;
}
vetnome *name=(vetnome *)malloc(sizeof(vetnome));
strcpy(name->nome,nome[30]);
aux2->pont=&name;
name->pont=NULL;
return;
}
}
if(chaveres==3){
if (tabEsp[chaveres].L==NULL)
{
letra *novo=(letra *)malloc(sizeof(letra));
vetnome *name=(vetnome *)malloc(sizeof(vetnome));
strcpy(novo->L,nome[0]);
strcpy(name->nome,nome[30]);
aux=novo;
aux2=name;
aux->pontpnome=&aux2;
return;
} else if(tabEsp[chaveres].L!=NULL){
aux2=aux->pontpnome;
while(aux2!=NULL)
{
aux2=aux2->pont;
}
vetnome *name=(vetnome *)malloc(sizeof(vetnome));
strcpy(name->nome,nome);
aux2->pont=name;
name->pont=NULL;
return;
}
}
if (chaveres>3){
puts("Espaço não reservado!");
}
}
CÓDIGO RESOLVIDO**
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define tamanho 3
typedef struct nomes vetnome;
typedef struct letras letra;struct nomes{
char nome[30];
vetnome *pont;
};
struct letras{
char L[4];
vetnome *pontpnome;
};
void inserir (letra **let, letra tabEsp[tamanho], vetnome **ini,int qtd);
int chave(char nome[30]);
int main()
{
int qtd=1,i=0;
char nome[30], resposta[30];
letra tabEsp[tamanho]={NULL,NULL,NULL};
printf("Insira 3 letras diferentes, você guardará nomes com essas iniciais depois desse processo: ");
while(qtd<4)
{
letra *let=(letra *)malloc(sizeof(letra));
vetnome *ini=(vetnome *)malloc(sizeof(vetnome));
let->pontpnome=NULL;
ini->pont=NULL;
inserir(&let, tabEsp, &ini, qtd);
system("pause");
system("cls");
qtd++;
}
puts("Aqui você irá colocar nomes dentro das 3 listas criadas! :)");
while(resposta!="NAO")
{
letra *let=(letra *)malloc(sizeof(letra));
vetnome *ini=(vetnome *)malloc(sizeof(vetnome));
let=NULL;
ini=NULL;
inserir(&let, tabEsp, &ini, qtd);
printf("Você quer continuar?[Sim/Nao]");
scanf("%s", &resposta);
system("pause");
system("cls");
}
return 0;
}
int chave(char nome[30])
{
unsigned int resultado= (int)nome[0]%tamanho;
if(resultado<0)
resultado=-resultado;
return resultado;
}
void inserir (letra Let, letra tabEsp[tamanho], vetnome Ini, int qtd)
{
char nome[30];
puts("Digite um nome: ");
scanf("%s", &nome);
int chaveres=chave(nome);
vetnome *aux2;
aux2=Ini;
letra *aux;
aux=Let;
if(chaveres==1)
{
if(tabEsp[chaveres].L==NULL)
{
letra *novo= (letra*) malloc(sizeof(letra));
vetnome *name=(vetnome *)malloc(sizeof(vetnome));
strcpy(novo->L,nome[0]);
strcpy(name->nome,nome);
aux=novo;
aux2=name;
aux->pontpnome=&aux2;
aux2->pont=NULL;
return ;
} else
if(tabEsp[chaveres].L!=NULL)
{
aux2=aux->pontpnome;
while(aux2!=NULL)
{
aux2=aux2->pont;
}
vetnome *name=(vetnome *)malloc(sizeof(vetnome));
strcpy(name->nome,nome);
aux2=name;
aux2->pont=NULL;
return;
}
}
if(chaveres==2)
{
if (tabEsp[chaveres].L==NULL)
{
letra *novo=(letra *)malloc(sizeof(letra));
vetnome *name=(vetnome *)malloc(sizeof(vetnome));
strcpy(novo->L,nome[0]);
strcpy(name->nome,nome[30]);
aux=novo;
aux2=name;
aux->pontpnome=&aux2;
return;
} else if(tabEsp[chaveres].L!=NULL)
{
aux2=aux->pontpnome;
while(aux2!=NULL)
{
aux2=aux2->pont;
}
vetnome *name=(vetnome *)malloc(sizeof(vetnome));
strcpy(name->nome,nome[30]);
aux2->pont=&name;
name->pont=NULL;
return;
}
}
if(chaveres==3)
{
if (tabEsp[chaveres].L==NULL)
{
letra *novo=(letra *)malloc(sizeof(letra));
vetnome *name=(vetnome *)malloc(sizeof(vetnome));
strcpy(novo->L,nome[0]);
strcpy(name->nome,nome[30]);
aux=novo;
aux2=name;
aux->pontpnome=&aux2;
return;
} else if(tabEsp[chaveres].L!=NULL)
{
aux2=aux->pontpnome;
while(aux2!=NULL)
{
aux2=aux2->pont;
}
vetnome *name=(vetnome *)malloc(sizeof(vetnome));
strcpy(name->nome,nome);
aux2->pont=name;
name->pont=NULL;
return;
}
}
if (chaveres>3)
{
puts("Espaço não reservado!");
}
}Discussão (0)
Carregando comentários...