Jump to content
AccioOnion

Função lê número mal num ficheiro binário

Recommended Posts

AccioOnion
#include <stdio.h>
#include <stdlib.h>

typedef struct Pessoa
	{
		int cc;
		char nome[51];
		char partida[11];
		char chegada[11];
		short int dia;
	} PESSOA;	

int main()
{
	int i;
	FILE* fps = fopen("okb","rb");

	PESSOA passageiro;
 
  	if (fps == NULL) 
 	{
    	 	printf("Problemas na abertura do arquivo\n");
		exit(1);
  	}

	else
	{
 	
			fread (&passageiro.cc, 4, 1, fps);
			fread (passageiro.nome, 1, 51, fps);
			fread (passageiro.partida, 1, 11, fps);
			fread (passageiro.chegada, 1, 11, fps);
			fread (&passageiro.dia, 2, 1, fps);
  		
			printf("%d ", passageiro.cc);
			for(i = 0; i < 51; i++)
			{
				printf("%c", passageiro.nome[i]);
			}
			for(i = 0; i < 11; i++)
			{
				printf("%c", passageiro.partida[i]);
			}
			for(i = 0; i < 11; i++)
			{
				printf("%c", passageiro.chegada[i]);
			}
				printf("%hd\n", passageiro.dia);
	}
	
  
 	fclose(fps);
}

Boa noite, estava aqui a fazer um trabalho e deparei-me com isto e não consigo perceber o porquê da função nao ler o que eu pretendo. Acho que deve ser algo bem simples mas como sou novo nisto não estou a conseguir detetar o que falha. É suposto esta função ler umas informações que estão num ficheiro em binário, o número do cc, nome da pessoa, local de partida e chegada do avião e dia do mês. Mas ao detetar o dia do mês a função em vez de escrever um número entre 1 - 30 escreve 256. Alguém percebe porquê?

Share this post


Link to post
Share on other sites
PsySc0rpi0n

Eu assim de cor não sei mas tens a certeza dos argumentos 2 e 3 do fread? 


Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
AccioOnion

Sim, acho que sim. Tenho que me guiar por isto que me foi dado no enunciado do trabalho:

O ficheiro binário tem uma informação similar:

• Um inteiro com o tamanho de quatro bytes para o número do bilhete de identidade;

• 51 caracteres para o nome da pessoa;

• 11 caracteres para o nome da cidade de partida;

• 11 caracteres para o nome da cidade de chegada;

• Um inteiro com o tamanho de dois bytes para o dia do mês.

Share this post


Link to post
Share on other sites
PsySc0rpi0n

E para que serve o 'h' ao lado do identificador '%c'????

 

Eu continuo a achar, sem certezas, que o problema será nesses dois argumentos do fread do dia.


Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
HappyHippyHippo

e que tal ler a estrutura toda de uma vez só ?

já agora : vê ai nos teus textos de referência como se escreve uma string na consola ...

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

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

×
×
  • 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.