Jump to content
Fórum Script Brasil
  • 0

Erro de segmentation fault, não sei onde é.


huokkio
 Share

Question

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++ )

 

Edited by Jhonas
Regras do Forum
Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.1k
×
×
  • Create New...