Ir para conteúdo
Fórum Script Brasil

huokkio

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Tudo que huokkio postou

  1. 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); }========================================================= AVISO: Favor postar as suas duvidas no Forum Principal ( C, C++ )
×
×
  • Criar Novo...