Ajuda com problema no código em C++
Olá boa noite a todos, estou com um trabalho em C de pilha, está funcionando perfeitamente, porém há um erro no final do programa, quando a pilha está totalmente desempilhada e eu dou o comando de empilhar ele deveria mostrar uma mensagem de que a pilha está vazia e finalizar o programa, porém o programa apenas dá erro e fecha.
Sigam o código abaixo:
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <locale.h>
struct Tipo_da_Pilha{
int cod;
struct Tipo_da_Pilha *Prox;
};
int Tamanho_da_Pilha = 0;
struct Tipo_da_Pilha * Topo;
struct Tipo_da_Pilha *Base;
void FPVazia(){
struct Tipo_da_Pilha *aux;
aux= (struct Tipo_da_Pilha*)malloc(sizeof(struct Tipo_da_Pilha));
Topo = aux;
Base = Topo;
Base -> Prox = NULL;
}
int cont;
void Empilhar (int x){
struct Tipo_da_Pilha * aux;
aux = (struct Tipo_da_Pilha*)malloc(sizeof(struct Tipo_da_Pilha));
aux -> Prox = Topo;
aux -> cod = x;
Topo = aux;
Tamanho_da_Pilha++;
cont = cont + 1;
}
void Imprimir(){
struct Tipo_da_Pilha *aux;
aux = Topo;
while (aux -> Prox != NULL){
printf(" Item = %d\n", aux -> cod);
aux = aux -> Prox;
}
}
void Remover(){
Topo = Topo -> Prox;
}
main ()
{
setlocale(LC_ALL, "Portuguese");
char op1 = '2';
int i, numero;
FPVazia();
while (op1 != '0'){
printf("\n\n\n\nDeseja fazer o empilhamento? (1 = SIM / 0 = NÃO)\n\n");
printf("Entre com a sua resposta: ");
op1 = getch();
if(cont == 0 && op1=='0'){
printf("\n\nO programa foi encerrado \n \n");
exit(0);
}else{
if(op1 != '1' && op1 !='0'){
printf("\n\n\nComando incorreto, insira novamente a resposta \n \n");
}else{
if(op1 == '1'){
printf("\n\nEntre com o número: ");
scanf("%d", &numero);
Empilhar(numero);
}else{
break;
}
}
}
}
printf("\n\n\nEssa é a pilha que você criou: \n\n\n");
Imprimir();
char op2 = '2';
while (op2 != '0'){
printf("\n\nGostaria de desempilhar? 1 = SIM / 0 = NÃO: \n\n");
printf("\nEntre com a sua resposta: ");
op2 = getch();
if(op2 != '1' && op2!='0'){
printf("\nComando incorreto, insira novamente a resposta \n \n");
}else{
if(op2 == '1' && cont>0){
Remover();
printf("\n\nUm número foi removido do topo da pilha: \n\n\n");
Imprimir();
}else{
printf("\n\n\n\nO programa foi encerrado \n \n");
exit(0);
}
}
}
}
Sigam o código abaixo:
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <locale.h>
struct Tipo_da_Pilha{
int cod;
struct Tipo_da_Pilha *Prox;
};
int Tamanho_da_Pilha = 0;
struct Tipo_da_Pilha * Topo;
struct Tipo_da_Pilha *Base;
void FPVazia(){
struct Tipo_da_Pilha *aux;
aux= (struct Tipo_da_Pilha*)malloc(sizeof(struct Tipo_da_Pilha));
Topo = aux;
Base = Topo;
Base -> Prox = NULL;
}
int cont;
void Empilhar (int x){
struct Tipo_da_Pilha * aux;
aux = (struct Tipo_da_Pilha*)malloc(sizeof(struct Tipo_da_Pilha));
aux -> Prox = Topo;
aux -> cod = x;
Topo = aux;
Tamanho_da_Pilha++;
cont = cont + 1;
}
void Imprimir(){
struct Tipo_da_Pilha *aux;
aux = Topo;
while (aux -> Prox != NULL){
printf(" Item = %d\n", aux -> cod);
aux = aux -> Prox;
}
}
void Remover(){
Topo = Topo -> Prox;
}
main ()
{
setlocale(LC_ALL, "Portuguese");
char op1 = '2';
int i, numero;
FPVazia();
while (op1 != '0'){
printf("\n\n\n\nDeseja fazer o empilhamento? (1 = SIM / 0 = NÃO)\n\n");
printf("Entre com a sua resposta: ");
op1 = getch();
if(cont == 0 && op1=='0'){
printf("\n\nO programa foi encerrado \n \n");
exit(0);
}else{
if(op1 != '1' && op1 !='0'){
printf("\n\n\nComando incorreto, insira novamente a resposta \n \n");
}else{
if(op1 == '1'){
printf("\n\nEntre com o número: ");
scanf("%d", &numero);
Empilhar(numero);
}else{
break;
}
}
}
}
printf("\n\n\nEssa é a pilha que você criou: \n\n\n");
Imprimir();
char op2 = '2';
while (op2 != '0'){
printf("\n\nGostaria de desempilhar? 1 = SIM / 0 = NÃO: \n\n");
printf("\nEntre com a sua resposta: ");
op2 = getch();
if(op2 != '1' && op2!='0'){
printf("\nComando incorreto, insira novamente a resposta \n \n");
}else{
if(op2 == '1' && cont>0){
Remover();
printf("\n\nUm número foi removido do topo da pilha: \n\n\n");
Imprimir();
}else{
printf("\n\n\n\nO programa foi encerrado \n \n");
exit(0);
}
}
}
}
Gabriel Sprovieri
Curtidas 0
Respostas
Gabriel Sprovieri
06/11/2020
Olá boa noite a todos, estou com um trabalho em C de pilha, está funcionando perfeitamente, porém há um erro no final do programa, quando a pilha está totalmente desempilhada e eu dou o comando de empilhar ele deveria mostrar uma mensagem de que a pilha está vazia e finalizar o programa, porém o programa apenas dá erro e fecha.
Sigam o código abaixo:
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <locale.h>
struct Tipo_da_Pilha{
int cod;
struct Tipo_da_Pilha *Prox;
};
int Tamanho_da_Pilha = 0;
struct Tipo_da_Pilha * Topo;
struct Tipo_da_Pilha *Base;
void FPVazia(){
struct Tipo_da_Pilha *aux;
aux= (struct Tipo_da_Pilha*)malloc(sizeof(struct Tipo_da_Pilha));
Topo = aux;
Base = Topo;
Base -> Prox = NULL;
}
int cont;
void Empilhar (int x){
struct Tipo_da_Pilha * aux;
aux = (struct Tipo_da_Pilha*)malloc(sizeof(struct Tipo_da_Pilha));
aux -> Prox = Topo;
aux -> cod = x;
Topo = aux;
Tamanho_da_Pilha++;
cont = cont + 1;
}
void Imprimir(){
struct Tipo_da_Pilha *aux;
aux = Topo;
while (aux -> Prox != NULL){
printf(" Item = %d\\n", aux -> cod);
aux = aux -> Prox;
}
}
void Remover(){
Topo = Topo -> Prox;
}
main ()
{
setlocale(LC_ALL, "Portuguese");
char op1 = '2';
int i, numero;
FPVazia();
while (op1 != '0'){
printf("\\n\\n\\n\\nDeseja fazer o empilhamento? (1 = SIM / 0 = NÃO)\\n\\n");
printf("Entre com a sua resposta: ");
op1 = getch();
if(cont == 0 && op1=='0'){
printf("\\n\\nO programa foi encerrado \\n \\n");
exit(0);
}else{
if(op1 != '1' && op1 !='0'){
printf("\\n\\n\\nComando incorreto, insira novamente a resposta \\n \\n");
}else{
if(op1 == '1'){
printf("\\n\\nEntre com o número: ");
scanf("%d", &numero);
Empilhar(numero);
}else{
break;
}
}
}
}
printf("\\n\\n\\nEssa é a pilha que você criou: \\n\\n\\n");
Imprimir();
char op2 = '2';
while (op2 != '0'){
printf("\\n\\nGostaria de desempilhar? 1 = SIM / 0 = NÃO: \\n\\n");
printf("\\nEntre com a sua resposta: ");
op2 = getch();
if(op2 != '1' && op2!='0'){
printf("\\nComando incorreto, insira novamente a resposta \\n \\n");
}else{
if(op2 == '1' && cont>0){
Remover();
printf("\\n\\nUm número foi removido do topo da pilha: \\n\\n\\n");
Imprimir();
}else{
printf("\\n\\n\\n\\nO programa foi encerrado \\n \\n");
exit(0);
}
}
}
}
Corrigindo, quando eu dou o comando desempilhar* com a pilha vazia dá o problema.
Sigam o código abaixo:
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <locale.h>
struct Tipo_da_Pilha{
int cod;
struct Tipo_da_Pilha *Prox;
};
int Tamanho_da_Pilha = 0;
struct Tipo_da_Pilha * Topo;
struct Tipo_da_Pilha *Base;
void FPVazia(){
struct Tipo_da_Pilha *aux;
aux= (struct Tipo_da_Pilha*)malloc(sizeof(struct Tipo_da_Pilha));
Topo = aux;
Base = Topo;
Base -> Prox = NULL;
}
int cont;
void Empilhar (int x){
struct Tipo_da_Pilha * aux;
aux = (struct Tipo_da_Pilha*)malloc(sizeof(struct Tipo_da_Pilha));
aux -> Prox = Topo;
aux -> cod = x;
Topo = aux;
Tamanho_da_Pilha++;
cont = cont + 1;
}
void Imprimir(){
struct Tipo_da_Pilha *aux;
aux = Topo;
while (aux -> Prox != NULL){
printf(" Item = %d\\n", aux -> cod);
aux = aux -> Prox;
}
}
void Remover(){
Topo = Topo -> Prox;
}
main ()
{
setlocale(LC_ALL, "Portuguese");
char op1 = '2';
int i, numero;
FPVazia();
while (op1 != '0'){
printf("\\n\\n\\n\\nDeseja fazer o empilhamento? (1 = SIM / 0 = NÃO)\\n\\n");
printf("Entre com a sua resposta: ");
op1 = getch();
if(cont == 0 && op1=='0'){
printf("\\n\\nO programa foi encerrado \\n \\n");
exit(0);
}else{
if(op1 != '1' && op1 !='0'){
printf("\\n\\n\\nComando incorreto, insira novamente a resposta \\n \\n");
}else{
if(op1 == '1'){
printf("\\n\\nEntre com o número: ");
scanf("%d", &numero);
Empilhar(numero);
}else{
break;
}
}
}
}
printf("\\n\\n\\nEssa é a pilha que você criou: \\n\\n\\n");
Imprimir();
char op2 = '2';
while (op2 != '0'){
printf("\\n\\nGostaria de desempilhar? 1 = SIM / 0 = NÃO: \\n\\n");
printf("\\nEntre com a sua resposta: ");
op2 = getch();
if(op2 != '1' && op2!='0'){
printf("\\nComando incorreto, insira novamente a resposta \\n \\n");
}else{
if(op2 == '1' && cont>0){
Remover();
printf("\\n\\nUm número foi removido do topo da pilha: \\n\\n\\n");
Imprimir();
}else{
printf("\\n\\n\\n\\nO programa foi encerrado \\n \\n");
exit(0);
}
}
}
}
GOSTEI 0