Furtadomito Postado Novembro 7, 2012 Denunciar Share Postado Novembro 7, 2012 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); }} Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Furtadomito
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
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.