#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
typedef struct cadastro{
char nome[20];
int idade;
} cadastro; //faltava agora o completar do typedef
cadastro *p = NULL;
int num, num_novo, num_old, realoca=0;
int opcao; //opcao deve ser inteiro se é utlizado como tal
char op;
void cadastra();
void exibe();
void menu();
void deletar();
int main() //int main completar e fazer sentido com o return 0 no fim
{
do{
menu();
printf("\tOpcao: ");
scanf("%d",&opcao);
fflush(stdin);
switch(opcao){
case 0:
break;
case 1:{
do{
cadastra();
printf("Deseja cadastrar mais (s/n): "); scanf(" %c", &op); fflush(stdin);
}while(toupper(op)!='N');
break;
}
case 2:
exibe();
break;
case 3:
deletar();
break;
default:
printf("Opcao invalida.\n\n");
}
}while(opcao!=0);
//getchar();
return 0;
}
void menu()
{
printf("\t[0] Sair\n\t[1] Cadastrar\n\t[2] Exibe\n\t[3] Excluir\n");
}
void cadastra()
{
if(p == NULL){
printf("Numero de cadastros: ");
scanf("%d",&num);
fflush(stdin);
p = (cadastro *)calloc(num, sizeof(cadastro));
int i;
for(i=0; i<num; i++){
printf("Cadastro %d\n",i+1);
printf("Nome: "); scanf("%s", p[i].nome);
printf("Idade: "); scanf("%d",&p[i].idade);fflush(stdin);
printf("\n\n");
}
}else{
num_old = num++;
p = realloc(p,num);
printf("Cadastro %d\n",num_old);
printf("Nome: "); scanf("%s",p[num_old].nome);
printf("Idade: "); scanf("%d",&p[num_old].idade);fflush(stdin);
}
}
void deletar(){
printf("Qual a posição a excluir?");
int pos;
scanf("%d", &pos);
pos-- ; //para ajustar aos indices que começam em 0
if (pos >= 0 && pos < num){ //se a posição é valida
int i;
for (i = pos;i < num - 1; ++i){
p[i] = p[i + 1];
}
p = realloc(p, --num * sizeof(cadastro));
}
}
void exibe()
{
int j;
if(p==NULL)
printf("\t -- Cadastro vazio. --\n\n");
else{
for(j=0; j<num;j++){
printf("Pessoa %d\n\n", j); //faltava o j aqui
printf("Nome: %s\n",p[j].nome);
printf("Idade: %d",p[j].idade);
puts("\n\n");
}
}
}