Ir ao conteúdo

Posts recomendados

Postado

Boa noite, pessoal

 

Complicado começar no fórum assim, mas passei a tarde toda em cima desse código, meus colegas tentaram me ajudar e nada. Espero que possam me ajudar.

 

Eu preciso acessar o arquivo arq.dat e ler o que está contido nele, o que consegui fazer nessa primeira parte do código (que descobre quantos times estão no arquivo). Na segunda parte, eu precisaria alocar memória e salvar as informações do arquivo, ali que surge o problema: o fread() não funciona.

 

Conseguem ver onde é o problema?

 

Se puderem me ajudar, agradeço!

times_t *le_times(const char *arquivo, unsigned int *numero_de_times){
	int i, j, teste, temp, testa, x;
	FILE *ptr;
	ptr=abre_arquivo("arq.dat");
	rewind(ptr);
	times_t descobre;	

		//descobre o numero de times no arquivo
		for (i=1; i>=0; i++){	
			teste = fread(&descobre,sizeof(descobre),1, ptr);
			//printf("%i\n", teste);
			if (teste != 1){
				temp = i-1;
				break;
			}
		}
	
		//aloca memoria e le o numero de times - TÁ DANDO PAU AQUI
		times_t *le = (times_t *) malloc(sizeof(times_t));
			testa = fread(&le[0], sizeof(times_t), 1, ptr);	
			printf("%i\n", testa);
		for (j=1; j<temp; j++){
			le = (times_t *) realloc(le, (j+1)*sizeof(times_t) );
			testa = fread(&le[j], sizeof(times_t), 1, ptr);
			if(testa != 0){
				printf("Teste\n");
			}
		}
	return temp;
}

 

  • Curtir 1
Postado

@vangodp O arquivo já estava pronto, é binário, não preciso alterar ele.

 

A struct t_times contém isso daqui

 

typedef struct {
	char nome[TAM_NOME];
	//0 goleiro, 1 zagueiro, 2 lateral, 3 volante, 4 meio, 5 atacante
	unsigned int posicao; 
	unsigned int gols_marcados;
	unsigned int bolas_roubadas;
	unsigned int numero_jogos;
	unsigned int finalizoes_certas;
	unsigned int finalizoes_erradas;
	unsigned int faltas_recebidas;
	unsigned int faltas_cometidas;
	unsigned int cartoes_vermelhos;
	unsigned int cartoes_amarelos;
	unsigned int penalti_defendidos;
	unsigned int defesas;
} jogador_t;

typedef struct {
	char nome[TAM_NOME];
	char estado[3];
	unsigned int dia_fundacao;
	unsigned int mes_fundacao;
	unsigned int ano_fundacao;
	unsigned int numero_tit_brasileiros;
	unsigned int numero_copas_brasil;
	unsigned int numero_tit_libertadores;
	unsigned int numero_tit_estadual;
	jogador_t jogadores[NUM_JOGADORES];
} times_t;

 

 

  • Curtir 1
Postado
10 minutos atrás, vangodp disse:

primeiro que vejo errado é a forma com a que você está abrindo o arquivo
.Se o arquivo é binário deve ser aberto como ptr=abre_arquivo("arq.dat", "r+b"); para leitura.

adicionado 8 minutos depois

que tamanho tem TAM_NOME? =/

 

TAM_NOME tem 50 e NUM_JOGADORES tem 21

Postado
1 minuto atrás, vangodp disse:

O que contêm esse arquivo? Simples estruturas times_t?

 

Sim, são 10 times com 21 jogadores cada

 

Os nomes são bem estranhos e os dados podem não fazer sentido porque foram gerados aleatoriamente pelo professor

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!