Ir para conteúdo

POWERED BY:

Arquivado

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

ZX350

Falha de segmentação na leitura do arquivo

Recommended Posts

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

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.0

Se 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

×

Informação importante

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