avner.max 0 Denunciar post Postado Março 31, 2016 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
saulod2 1 Denunciar post Postado Maio 7, 2016 Você está comparando strings. Em C não há suporte a tal comparação, apenas via strcmp(). O correto noseu 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
freak1Day 1 Denunciar post Postado Maio 7, 2016 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