Estou criando uma pilha com lista ligada onde tenho que dizer se uma expressão mtematica está corretamente formada baseando se na verificação da ordem dos parenteses , chaves e conchetes. Não podemos possuir colchetes e chaves dentro dos parenteses e nen chaves dentro dos conchetes.
Pela minhas conclusões :
Apenas estou tendo problemas no momento de amrmazenamento da variavel no "case 1" , gostaria de saber qual o erro , pois o programa compila porem quando selecionado o "case 1" o programa se auto termina.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
//Empilhar e depois verificar a expressao
typedef struct lista_ligada{
char variavel;
struct lista_ligada *prox;
}pilha; //STRUCT PILHA
void create(pilha *p){
p->prox=(pilha*)malloc(sizeof(pilha));
}//FINALIZA CREATE
int check(pilha * p,char num){
pilha *x; //NOVA PILHA
char a; //VARIAVEL QUE PEGA A VARIAVEL DO VETOR X
x = p->prox; //IGUALA A NOVA PILHA Á PILHA PRINCIPAL
while (x != NULL){
x = x->prox; //PASSANDO DE UMA LISTA P/ OUTRA
}
a=x->variavel;
if(a=='('){
return 1;
}//FECHA IF
if(num=='[' && a!='('){
return 1;
}//FECHA IF
else{
return num;
}//FECHA ELSE
if(num=='{' && a!='(' && a!='['){
return 1;
}
else{
return num;
}
}//FECHA FUNÇÃO
void finaliza(pilha *p,char a){
if(a!='1'){
printf("\nA expressao está malformada em :",a);
} else{
printf("\nA expressao esta bem formada");
}
}
void print(pilha *p){
if(p->prox!=NULL){
printf("%c>>",p->variavel);
print(p->prox);
}//FINALIZA IF
}//FINALIZA PRINT
main(){
pilha *val;
char xescolha;
char reveladouro='1';
char vetor[100];
val=(pilha*)malloc(sizeof(pilha));
val->prox=NULL;
printf("Escolha a opcao que melhor lhe convenha:\n"
" 1 - Inserir caracter \n"
" 2 - Imprimir \n"
" 3 - Finalizar expressao \n");
scanf("%c",&xescolha);
switch(xescolha){
case'1':{
printf("Digite o caracter a ser inserido:\n");
//////////////////////////////////////////// O PROBLEMA É AQUI////////////////////////////
Pergunta
Guest Bebop
Ola pessoal ,
Estou criando uma pilha com lista ligada onde tenho que dizer se uma expressão mtematica está corretamente formada baseando se na verificação da ordem dos parenteses , chaves e conchetes. Não podemos possuir colchetes e chaves dentro dos parenteses e nen chaves dentro dos conchetes.
Pela minhas conclusões :
Apenas estou tendo problemas no momento de amrmazenamento da variavel no "case 1" , gostaria de saber qual o erro , pois o programa compila porem quando selecionado o "case 1" o programa se auto termina.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
//Empilhar e depois verificar a expressao
typedef struct lista_ligada{
char variavel;
struct lista_ligada *prox;
}pilha; //STRUCT PILHA
void create(pilha *p){
p->prox=(pilha*)malloc(sizeof(pilha));
}//FINALIZA CREATE
int check(pilha * p,char num){
pilha *x; //NOVA PILHA
char a; //VARIAVEL QUE PEGA A VARIAVEL DO VETOR X
x = p->prox; //IGUALA A NOVA PILHA Á PILHA PRINCIPAL
while (x != NULL){
x = x->prox; //PASSANDO DE UMA LISTA P/ OUTRA
}
a=x->variavel;
if(a=='('){
return 1;
}//FECHA IF
if(num=='[' && a!='('){
return 1;
}//FECHA IF
else{
return num;
}//FECHA ELSE
if(num=='{' && a!='(' && a!='['){
return 1;
}
else{
return num;
}
}//FECHA FUNÇÃO
void finaliza(pilha *p,char a){
if(a!='1'){
printf("\nA expressao está malformada em :",a);
} else{
printf("\nA expressao esta bem formada");
}
}
void print(pilha *p){
if(p->prox!=NULL){
printf("%c>>",p->variavel);
print(p->prox);
}//FINALIZA IF
}//FINALIZA PRINT
main(){
pilha *val;
char xescolha;
char reveladouro='1';
char vetor[100];
val=(pilha*)malloc(sizeof(pilha));
val->prox=NULL;
printf("Escolha a opcao que melhor lhe convenha:\n"
" 1 - Inserir caracter \n"
" 2 - Imprimir \n"
" 3 - Finalizar expressao \n");
scanf("%c",&xescolha);
switch(xescolha){
case'1':{
printf("Digite o caracter a ser inserido:\n");
//////////////////////////////////////////// O PROBLEMA É AQUI////////////////////////////
scanf("%c",val->variavel);
check(val,val->variavel);
if(check(val,val->variavel)!=1){
reveladouro=val->variavel;
}
create(val);
}break;
case'2':{
print(val);
}break;
case'3':{
finaliza(val,reveladouro);
}break;
}//FINALIZA SWITCH
system("pause");
return 0;
}
Link para o comentário
Compartilhar em outros sites
4 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.