Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda em leitura de arquivo - C


Luiz.Sabbagh

Pergunta

Boa noite,

Estou tendo problemas com a leitura de dados em um arquivo binário.

Ele lê normalmente na primeira parte, que descobre o número de times no arquivo. Então, eu precisaria salvar os dados desse time nesse arquivo, mas onde faz a alocação ele não lê o arquivo (fiz só um teste para ver se entra no if, mas nada)

Se puderem me ajudar, agradeço!

	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;
	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);
            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;
}
Editado por Luiz.Sabbagh
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
 int i, j, teste, temp, testa, x;
    FILE *ptr;
    
  //esta linha esta errada
 
   ptr=abre_arquivo("arq.dat");
  //O correto seria:

  if((ptr = fopen("file.dat", "ab+"))==NULL){//NULL e 0 são a mesma coisa
  		perror(":");
          return 1;
 
	}
    
Escolha nomes sugestivo para suas variáveis torna seu código mais legível.

 

Este for não tem logica, Veja só:

i recebe 1 enquato i for maior ou igual a 0 i++


        for (i=1; i>=0; i++){    
            teste = fread(&descobre,sizeof(descobre),1, ptr);
            if (teste != 1){
                temp = i-1;
                break;
            }
        }

neste trecho i já é maior e diferente que 0, e sempre será, pois i esta somando mais um a cada laco,
logo seu for só possui uma expressão booleana neste laco, quando isso ocorre écoerente utilizar um while veja só:

        while(teste == 1){    
            teste = fread(&descobre,sizeof(descobre),1, ptr);
            if (teste != 1){
                temp = i-1;            
            }
        }

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...