Jump to content
Sign in to follow this  
French_teck

Ajuda na leitura e carregamento dum ficheiro sff

Recommended Posts

French_teck

Boas pessoal, tou com um problema que nao consigo resolver,

tenho uma estrutura pessoa com

char bi[9]...e mais uma string....

Faço a leitura da seguinte forma

--->

Pessoa *readFile(int option, int *tot)
{	
    FILE *tiny;
    char ch;
    int totch=1,i,j;
    long int id;         //diz nos quando encontra uma assinatura biometrica
    Pessoa *v=NULL;

*tot=0;

    if(option==1)
    {
	tiny=fopen("DANGER_DB_TINY.txt","r+");
	if(tiny!=NULL){
		printf("Ficheiro aberto com sucesso!\n");
	}
	else {
		printf("Error.....\n");
	}
	while(1)
	{   
            v=(Pessoa*)realloc(v,(++(*tot))*sizeof(Pessoa));              
		do{ 
			fscanf(tiny,"%c",&ch);
			v[*tot-1].bi[totch-1]=ch;
			totch++;
		}while(ch!='\t');
		v[*tot-1].bi[totch-1]='\0';
		do{
			fscanf(tiny,"%c",&ch);
			v[*tot-1].biometric_signature[totch-1]=ch;
			totch++;
		}while(ch!= '\n');
		v[*tot-1].biometric_signature[totch-1]='\0';               
	}     
	fclose(tiny);

	for(i=0;i<*tot;i++){
		printf("%%s\t%s\n",v[i].bi,v[i].biometric_signature);
	}
	getchar();
	return(v);

}//fecho do if

ao compilar o programa todo, corre td bem, na leitura ele diz m ficheiro aberto com sucesso, mas dpois nao abre, e bloqueia, diz "main.c stop working"....

A formataçao de uma linha no ficheiro é um BI ou seja (8 numeros) a seguir tem '\t' , mais 2048 caracteres e a seguir '\n' ...

eu uso uma string pa guardar o bi, pq optimiza a minha leitura e pesquisa no windows

Share this post


Link to post
Share on other sites
thoga31

Dá cor ao código. Mete-o entre estas tags, sem espaços:

[ code = c ] [ /code ]


Knowledge is free!

Share this post


Link to post
Share on other sites
French_teck
Pessoa *readFile(int option, int *tot)
{   
    FILE *tiny;
    char ch;
    int totch=1,i,j;
    long int id;         //diz nos quando encontra uma assinatura biometrica
    Pessoa *v=NULL;

*tot=0;
   
    if(option==1)
    {
      tiny=fopen("DANGER_DB_TINY.txt","r+");
      if(tiny!=NULL){
         printf("Ficheiro aberto com sucesso!\n");
      }
      else {
         printf("Error.....\n");
      }
      while(1)
      {   
            v=(Pessoa*)realloc(v,(++(*tot))*sizeof(Pessoa));             
         do{
            fscanf(tiny,"%c",&ch);
            v[*tot-1].bi[totch-1]=ch;
            totch++;
         }while(ch!='\t');
         v[*tot-1].bi[totch-1]='\0';
         do{
            fscanf(tiny,"%c",&ch);
            v[*tot-1].biometric_signature[totch-1]=ch;
            totch++;
         }while(ch!= '\n');
         v[*tot-1].biometric_signature[totch-1]='\0';               
      }     
      fclose(tiny);
      
      for(i=0;i<*tot;i++){
         printf("%%s\t%s\n",v.bi,v.biometric_signature);
      }
      getchar();
      return(v);
      
   }//fecho do if

Share this post


Link to post
Share on other sites
thoga31

Cor no tópico inicial... Dá para editar.

Por curiosidade, estudas na UBI? (se quiseres dizer)


Knowledge is free!

Share this post


Link to post
Share on other sites
thoga31

Yes i am ;)

Porque ?

Conheço esse exercício. Acompanhei-o de muito perto, pois um amigo meu teve de o fazer (na UBI) e eu ainda lhe dei umas dicas para o carregamento e pesquisa. Reconheci-o, e não contive a curiosidade. :D


Knowledge is free!

Share this post


Link to post
Share on other sites
KTachyon

Este exercício não é novo aqui no fórum. Ainda há bem pouco tempo alguém pediu ajuda na resolução.

Eu diria para correres o debugger para saberes exactamente onde e porque é que ele pára. Mas o ideal seria mesmo poder dar uma vista de olhos no main.

Podes tentar fazer uns quantos printfs para tentar descobrir onde se encontra o bug. Mas coloca '\n' no final de cada printf() para garantir que é feito o flush para o stdout.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
thoga31

Este exercício não é novo aqui no fórum. Ainda há bem pouco tempo alguém pediu ajuda na resolução.

No meio de 65 caloiros em Informática, pelo menos 1 há-de conhecer o P@P. Pelos vistos já são 2. ;)

O melhor método é, de facto, o dos printf(). Testa passo a passo até que há-de haver um em que o código que antecede o próximo printf() lança uma excepção.


Knowledge is free!

Share this post


Link to post
Share on other sites
RSFalcon7

o erro parece-me estar aqui, estas sempre a ler o primeiro char da string, ou seja, o ch é nunca muda.

         do{
            fscanf(tiny,"%c",&ch);
            v[*tot-1].bi[totch-1]=ch;
            totch++;
         }while(ch!='\t');
         v[*tot-1].bi[totch-1]='\0';
         do{
            fscanf(tiny,"%c",&ch);
            v[*tot-1].biometric_signature[totch-1]=ch;
            totch++;
         }while(ch!= '\n');
         v[*tot-1].biometric_signature[totch-1]='\0';               

usa strcopy

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.