Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom tarde galera, tenho que ler um arquivo chamado entrada.txt e relaizar as contas, porém pelo fonte que construi ta dando falha de segmentação alguem pode me ajudar a arrumar essa. O arquivo está disposto dessa maneira:
R 10.0 20.0
T 20.0 5.0
C 4.0
R 2.0 3.0
R 1.0 0.5
C 1.0
T 1.0 1.0
#include<stdio.h>#include<math.h>struct reg{ char tipo; float v1, v2, area;};typedef struct reg Reg;/Funcao de conversao para float/float cfloat(char vet) { int i = 0,j = 0, k = 0; float v = 0; while( vet[k] != '\0') { k++; if(vet[k] == '.' ) j = k; } for(i=0; i<j; i++) { v +=((int)vet[i]-48) pow(10, j-i-1); } v = v pow(10,k-j-1); for(i=(j+1); i<k; i++) { v +=((int)vet[i]-48) pow(10, k-i-1); } return (v / pow(10, k-j-1));}/Interpretando o arquivo/Reg VetReg(char Linha){ int i = 0, j = 0; char vr1[5], vr2[5]; Reg A; while(Linha[i] == ' ') i++; while(Linha[i] != ' ') { A.tipo = Linha[i]; i++; j++; } i++; j = 0; while(Linha[i] != ' ') { vr1[j] = Linha[i]; j++; i++; } vr1[j] = '\0'; A.v1 = cfloat(vr1); i++; j = 0; while(Linha[i] != ' ') { vr2[j] = Linha[i]; j++; i++; } vr2[j] = '\0'; A.v2 = cfloat(vr2); return(A);}int main(void){ Reg Todos[10]; char geo[20]; char ch; int i = 0, j = 0, qdados = 0; FILE arq; arq = fopen("entrada.txt", "r"); if(arq == NULL) { printf("\n Arquivo nao existe! \n"); exit(1); } ch = fgetc(arq); if(ch != EOF) { if(ch != '\n' && ch != EOF && ch != '\r') { geo[i] = ch; i++; ch = fgetc(arq); } Todos[j] = VetReg(geo); j++; ch = fgetc(arq); } qdados = j; for(j = 0; j < qdados; j++) { printf("%s %.1f %.1f ", Todos[j].tipo, Todos[j].v1, Todos[j].v2); }}
Carregando comentários...