ZX350 0 Denunciar post Postado Outubro 23, 2006 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); }} Compartilhar este post Link para o post Compartilhar em outros sites
skimo-solar 0 Denunciar post Postado Outubro 23, 2006 Problemas de segmentation fault normalmente são problemas na alocação de memória. Talvez você devesse rever a forma como você está trabalhando com este vetor de estruturas. Eu só substitui aqui: printf("%s %.1f %.1f ", Todos[j].tipo, Todos[j].v1, Todos[j].v2);O %s por %c e imprimiu. Mas não sei se seus cálculos estão saindo corretos... (provavelmente não). A saída aqui foi @ 0.0 0.0Se você puder explicar o que você está tentando fazer talvez eu possa ser mais útil. :) Compartilhar este post Link para o post Compartilhar em outros sites