Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

avner.max

Falha de segmentação

Recommended Posts

Alguém pode me ajudar a descobrir o que está causando está falha de segmentação?

É uma calculador pós fixada, que lê os dados de um arquivo (arqEntrada) calcula e coloca o resultado em outro arquivo(arqSaida)!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char* argv[]){

int j, aux, vetAux[2];
char snumero[5];
FILE *fp;

	fp = fopen("arqEntrada", "r");
	if (fp == NULL){
		perror ("Erro ao abrir o arquivo para leitura.\n");
		return(-1);
	}

	while ((fgets(snumero, sizeof(snumero), fp)) != NULL){
		printf("%s", snumero);
		if ((snumero == "+") || (snumero == "-") || (snumero == "*") || (snumero == "/")){
			if (snumero == "+") aux = vetAux[j] + vetAux[j - 1];
			if (snumero == "-") aux = vetAux[j] - vetAux[j - 1];
			if (snumero == "*") aux = vetAux[j] * vetAux[j - 1];
			if (snumero == "/") aux = vetAux[j] / vetAux[j - 1];
			vetAux[j] = aux;
			j = 0;
		}else{
			vetAux[j] = atoi(snumero);
			j++;
		}
	}

	fclose(fp);

	fp = fopen("arqSaida", "w");
	if (fp == NULL){
		perror ("Erro ao abrir o arquivo para leitura.\n");
		return(-1);
	}

	printf("Resultado: %i\n", vetAux[j]);
	fprintf(fp, "%i\n", vetAux[j]);

	fclose(fp);

	return(0);

}

Estou utilizando o "arqEntrada" com os seguintes dados:

1
2
+
4
*

No "arqSaida" tem que chegar a resposta 12.

A falha está acontecendo na linha 19, mas não estou conseguindo descobrir a causa dela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está comparando strings. Em C não há suporte a tal comparação, apenas via strcmp(). O correto no
seu caso é comparar os caracteres, e já que só há um por linha, então snumero[0] == '+' seria suficiente; e, assim sucessivamente para os demais operadores.

o/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exatamente como o saulod2 disse, e complementado, vamos resumir cada linha possui uma string de 5 caracteres, como vamos saber em qual dos caracteres esta o operador (+,-,*,etc), você poderia utilizar a função strcmp para comparar strings assim:

//Verifica se resultado é verdadeiro

if(strcmp(snumero,"+") == 0)

Mas se quiser verificar apenas um caractere você precisa utilizar a função if assim:

if(snumero[numeroDoCaractere] == '+')

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.