Dúvida em Alocação Dinâmica de Struct
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include <stdbool.h>
int TAM = 0;
typedef struct
{
char nome[20];
char telefone[20];
char email[20];
} Agenda;
void menu(Agenda *pAgenda);
Agenda* AlocaAgenda();
void RealocaAgenda(Agenda *pAgenda);
Agenda ColetaDados();
void ImprimeAgenda(Agenda *pAgenda,int num);
int InsereAgenda(Agenda *pAgenda);
int AlteraAgenda(Agenda *pAgenda);
int PesquisaAgenda(Agenda *pAgenda);
int RemoveAgenda(Agenda *pAgenda);
void ListarAgenda(Agenda *pAgenda);
void LiberaAgenda(Agenda *pAgenda);
int main()
{
Agenda *listaAgenda = AlocaAgenda();
menu(listaAgenda);
return 0;
}
void menu(Agenda *pAgenda)
{
bool resp = true;
while(resp)
{
int cont;
printf("\n--- MENU ---");
printf("\n1 - Cadastrar");
printf("\n2 - Alterar");
printf("\n3 - Remover");
printf("\n4 - Pesquisar");
printf("\n5 - Listar");
printf("\n0 - Sair");
printf("\nOpcao: ");
fflush(stdin);
scanf("%d",&cont);
switch(cont)
{
case 0:
LiberaAgenda(pAgenda);
resp = false;
break;
case 1:
InsereAgenda(pAgenda);
break;
case 2:
fflush(stdin);
AlteraAgenda(pAgenda);
break;
case 3:
RemoveAgenda(pAgenda);
break;
case 4:
fflush(stdin);
PesquisaAgenda(pAgenda);
break;
case 5:
ListarAgenda(pAgenda);
fflush(stdin);
break;
default:
printf("Opcao Invalida!");
getch();
system("cls");
break;
}
}
}
Agenda* AlocaAgenda()
{
Agenda *p = (Agenda*)malloc(sizeof(Agenda));
if(p!= NULL)
{
return p;
}
else
{
exit(0);
}
}
void RealocaAgenda(Agenda *pAgenda)
{
pAgenda = (Agenda*)realloc(pAgenda,(TAM+1)*sizeof(Agenda));
if(pAgenda == NULL)
{
printf("ERRO!\n");
exit(0);
}
}
Agenda ColetaDados()
{
Agenda dados;
fflush(stdin);
printf("Digite Nome: ");
gets(dados.nome);
printf("Digite Telefone: ");
gets(dados.telefone);
printf("Digite Email: ");
gets(dados.email);
return dados;
}
int InsereAgenda(Agenda *pAgenda)
{
int resp = 1,cont =0;
while(resp != 0 )
{
if(TAM == 0 )
{
pAgenda[TAM] = ColetaDados();
TAM++;
cont++;
printf("Cadastrado com sucesso!");
getch();
system("cls");
}
else if(TAM > 0 && cont == 0 )
{
RealocaAgenda(pAgenda);
pAgenda[TAM] = ColetaDados();
TAM++;
printf("Cadastrado com sucesso!");
getch();
system("cls");
}
else
{
pAgenda[TAM] = ColetaDados();
TAM++;
printf("Cadastrado com sucesso!");
getch();
system("cls");
}
printf("\nCadastrar mais ? 1- Sim 2 - Nao");
printf("\nOpcao: ");
scanf("%d",&resp);
switch(resp)
{
case 1:
RealocaAgenda(pAgenda);
cont++;
break;
case 2:
fflush(stdin);
resp = 0;
printf("Retornando menu anterior...\n\n");
getch();
system("cls");
break;
default:
printf("Opcao Invalida!");
getch();
system("cls");
break;
}
}
}
void ImprimeAgenda(Agenda *pAgenda,int num)
{
printf("\nNome: %s",pAgenda[num].nome);
printf("\nTelefone: %s",pAgenda[num].telefone);
printf("\nEmail: %s\n",pAgenda[num].email);
}
int AlteraAgenda(Agenda *pAgenda)
{
char nome[20];
printf("\nDigite nome a ser buscado: ");
gets(nome);
int i= 0 ;
while(i < TAM && strcmp(nome,pAgenda[i].nome) != 0)
{
i++;
}
if(strcmp(nome,pAgenda[i].nome) != 0)
{
printf("Nao encontrado!\n\n");
getch();
system("cls");
return 0;
}
else
{
pAgenda[i] = ColetaDados();
printf("Alterado com sucesso!\n\n");
getch();
system("cls");
}
return 1;
}
int PesquisaAgenda(Agenda *pAgenda)
{
char nome[20];
printf("\nDigite nome a ser buscado: ");
gets(nome);
int i= 0 ;
while(i < TAM && strcmp(nome,pAgenda[i].nome) != 0)
{
i++;
}
if(strcmp(nome,pAgenda[i].nome) != 0)
{
printf("Nao encontrado!\n\n");
getch();
system("cls");
return 0;
}
else
{
ImprimeAgenda(pAgenda,i);
getch();
system("cls");
}
return 1;
}
int RemoveAgenda(Agenda *pAgenda)
{
char nome[20];
fflush(stdin);
printf("Digite nome a ser removido: ");
gets(nome);
int i = 0;
while(i < TAM && strcmp(nome,pAgenda[i].nome)!= 0)
{
i++;
}
if(strcmp(nome,pAgenda[i].nome)!= 0)
{
printf("Nome nao cadastrado!\n\n");
getch();
system("cls");
return 0;
}
else
{
int resp = 1;
while(resp != 0)
{
ImprimeAgenda(pAgenda,i);
printf("\nDeseja remover? 1 - Sim 2 - Nao");
printf("\nOpcao: ");
scanf("%d",&resp);
switch(resp)
{
case 1:
{
Agenda aux;
int num;
for(num = i; num<TAM; num++)
{
aux = pAgenda[i+1];
pAgenda[i] = aux;
}
TAM--;
RealocaAgenda(pAgenda);
resp = 0;
printf("Removido com sucesso!\n\n");
getch();
system("cls");
break;
}
case 2:
{
resp = 0;
break;
}
default:
{
printf("Opcao Invalida!\n");
system("cls");
break;
}
}
}
}
}
void ListarAgenda(Agenda *pAgenda)
{
int n;
if(TAM == 0)
{
printf("Agenda Vazia!\n\n");
getch();
system("cls");
}
else
{
while(n < TAM)
{
ImprimeAgenda(pAgenda,n);
n++;
printf("\n");
}
}
getch();
system("cls");
}
void LiberaAgenda(Agenda *pAgenda)
{
free(pAgenda);
}
Boa noite sou novo no fórum, estou tentando criar uma agenda de cadastros, só que ela apresenta vários erros como por exemplo: na hora de cadastrar só cadastra 2 contatos, na hora de listar o compilador buga e fecha o programa .. alguem tem alguma ideia??Discussão (0)
Carregando comentários...