Ir para conteúdo
Fórum Script Brasil
  • 0

Pilhas com string e 2 struct


Furtadomito

Pergunta

Não estou conseguindo implementar corretamente... da falha de segmentação na hora de inserir mais de um registro, alguém ajuda??

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

typedef struct _Aluno{

char nome[30];

int idade;

}Tp_Aluno;

typedef struct _Pilha{

Tp_Aluno *info;

int topo;

}Tp_Pilha;

void criaPilha(Tp_Pilha *p, int valor){

Tp_Aluno *aux = (Tp_Aluno*) malloc(sizeof(Tp_Aluno) * valor);

p->info=aux;

}

int estaCheia(Tp_Pilha *p,int valor){

if(p->topo>=valor-1){

return 1;

}

return 0;

}

int estaVazia(Tp_Pilha *p){

if(p->topo==-1){

return 1;

}

return 0;

}

int push(Tp_Pilha *p, Tp_Aluno *num){

p->topo++;

strcpy(p->info[p->topo].nome,num->nome);

p->info[p->topo].idade = num->idade;

return 1;

}

int pop(Tp_Pilha *p){

if(estaVazia(p)==0){

printf("Aluno removido: %s \n", p->info[p->topo].nome);

p->topo--;

}

else{

printf("\n \n Pilha Vazia!! \n \n");

}

return -1;

}

int display(Tp_Pilha *p){

int i;

if(estaVazia(p)==0){

printf("\nAlunos Matriculados: \n \n");

for(i=p->topo;i>=0;i--){

printf("Aluno: %s \n",p->info.nome);

printf("Idade: %d \n",p->info.idade);

printf("\n \n");

}

}

else{

printf("\n PILHA VAZIA!! \n \n");

}

return 0;

}

int consultar(Tp_Pilha *p){

if(estaVazia(p)!=1){

printf("\nAluno cadastrado no topo:\n");

printf("Aluno: %s \n",p->info[p->topo].nome);

printf("Idade: %d \n",p->info[p->topo].idade);

}

return 0;

}

int main(){

int n,menu;

Tp_Pilha *p=(Tp_Pilha*) malloc(sizeof(Tp_Pilha));

Tp_Aluno *num=(Tp_Aluno*) malloc(sizeof(Tp_Aluno));

p=(Tp_Pilha*)malloc(sizeof (Tp_Pilha));

p->topo=-1;

printf("\nInforme quantos Alunos deseja cadastrar: \n");

scanf("%d",&n);

criaPilha(p,n);

while(menu!=0){

printf("\n---------------------------------\n");

printf(" [1]Cadastrar Aluno: \n");

printf(" [2]Excluir cadastro: \n");

printf(" [3]Imprimir Cadastros: \n");

printf(" [4]Buscar cadastro: \n");

printf(" [0]Sair: \n");

printf("---------------------------------\n");

printf("\n Informe qual sua opcao:");

scanf("%d", &menu);

switch(menu){

case 1:

printf("\n Digite o nome do ALUNO: \n");

fflush(stdin);

gets(num->nome);

printf("\n Digite a Idade: \n");

scanf("%d",&num->idade);

push(p,num);

display(p);

break;

case 2:

pop(p);

display(p);

break;

case 3:

printf("\n");

display(p);

break;

case 4:

consultar(p);

break;

case 0:

printf("\n Programa Finalizado!! \n");

break;

default:

printf("\n Numero digitado ivalido!!\n");

}

free(p);

}

}

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...