Então galera, sou novato no fórum me avisem se fiz algo errado, já pesquisei sobre mas não achei exatamente minha dúvida. Então to fazendo programação na faculdade, e tenho um trabalho para fazer uma calculadora polonesa. Ainda não tenho conhecimentos sobre ponteiros e nem funções por isso não utilizei no meu programa. O mesmo compila (compilador = gcc), mas quando digito qualquer equação ele dá um Segmentation Fault, que sei que é um problema relacionado a alocação de memória mas não tenho ideia de como resolver-lo nem como achá-lo, só sei que o mesmo está dentro de um if que criei na função que está sinalizado abaixo. Gostaria da ajuda de vocês. Segue o código:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main (){
int vas, num_e=1; // vassoura, número de equações
char equacao[160],ch1,ch2; //2n-1 + /0.
int cont1,cont3, cont2, lim, i=0, num1, num2,final=0,num3, numr;
char res[3];
char eq2[80],eq3[80],ch3[2];
printf("Calculadora Polonesa:\nEste programa só aceita números de 0 à 9 e os operadores \"+,-,*,%%,/\". \n\n");
printf("Para inserir uma equação, digite números de 0 à 9 e\ndepois os operadores todos separados por espaços. \n\n");
printf("Digite \"exit\" para terminar o programa.\n\n");
for (vas=1;;vas++){
printf("Insira a %dº equação: \n",num_e);
gets(equacao);
lim = strlen(equacao);
for(cont3=1;cont3<lim;cont3+=2){ //TESTE DE ESPAÇOS NA EQUAÇÃO
if (equacao[cont3]!=' '){
printf("Erro. Partes da equação não estão separadas por um espaço.\n");
strcpy(equacao,"");
printf("Insira a %dº equação novamente: \n",num_e);
gets (equacao);
cont3=1;
}
lim = strlen(equacao);
}
if((equacao[0]=='e') && (vas==1)){
printf("Encerrando o programa...\n");
break;
}
if((equacao[0]=='e') && (vas>1))
break;
for(cont3=0;cont3<lim;cont3++){ //For para imprimir a equação de entrada
printf("%c",equacao[cont3]);
}
for (cont1=0; cont1<lim; cont1++){ //RESULOÇÃO DA EQUAÇÃO NESTE FOR
lim = strlen(equacao);
ch3[0] = equacao[cont1];
num3 = atoi(ch3);
if (((num3>57) || (num3<48)) && equacao[cont1]!=' ') { //O PROBLEMA ESTÁ NESSE IF...LEU UM SINAL, E PEGA OS 2 NÚMEROS ANTERIORES.
ch1 = equacao[cont1-2]; //Convertendo caracteres para inteiro
ch2 = equacao[cont1-4];
num1 = ch1-48;
num2 = ch2-48;
switch (equacao[cont1]){
case '+':
numr=num1+num2;
break;
case '-':
numr=num2-num1;
break;
case '*':
numr=num1*num2;
break;
case '/':
numr=num2/num1;
break;
case '%':
numr=num2%num1;
break;
}
cont2=0;
while(cont2<(cont1-4)){ //Copiando a parte inicial da equação para eq2(antes do sinal)
eq2[cont2]=equacao[cont2];
cont2++;
}
cont2=(cont1+1); //Copiando a parte final da equação(após o sinal)
while(cont2<lim){
eq3[i]=equacao[cont2];
i++;
}
res[0]=numr+48;
strcat(eq2,res); //Concatenando a parte inicial da equação mais o resultado da operação realizada
strcat(eq2,eq3); //Concatenando parte inicial + resultado + parte final
strcpy(equacao,"");
strcpy(equacao,eq2); //Copiando nova equação concatenada para a principal
strcpy(eq2,""); // Zerando strings
strcpy(eq3,"");
cont1=0;
i=0; //zerando tudo para para repetir o for
}
}
printf(" = %c\n",equacao[0]);
final += atoi(equacao); //SOMANDO AO RESULTADO FINAL
num_e++;
}
if ((vas>1) && (equacao[0]=='e'))
printf("O resultado final é: %d\n",final);
}
Pergunta
huokkio
Então galera, sou novato no fórum me avisem se fiz algo errado, já pesquisei sobre mas não achei exatamente minha dúvida. Então to fazendo programação na faculdade, e tenho um trabalho para fazer uma calculadora polonesa. Ainda não tenho conhecimentos sobre ponteiros e nem funções por isso não utilizei no meu programa. O mesmo compila (compilador = gcc), mas quando digito qualquer equação ele dá um Segmentation Fault, que sei que é um problema relacionado a alocação de memória mas não tenho ideia de como resolver-lo nem como achá-lo, só sei que o mesmo está dentro de um if que criei na função que está sinalizado abaixo. Gostaria da ajuda de vocês. Segue o código:
=========================================================
AVISO: Favor postar as suas duvidas no Forum Principal ( C, C++ )
Regras do Forum
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.