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

Arquivo BIN: Leitura e Manipulação.


sloncomplex

Pergunta

Olá, preciso implementar um programa em C que lê de um arquivo binário um vetor de unsigned int's, porém, não sei a quantidade de elementos nem nada, pesquisei sobre as funções ftell e fseek, mas ainda estou confuso, gostaria que alguém me desse uma luz sobre tal coisa.

 

Coloquei o exemplo de código que estou tentando desenvolver, basicamente, ler o vetor, fazer sua inversão e pegar um dígito especifico de cada número, a lógica do problema está sanada, porém não consigo ler o vetor.

 

Agradeço desde já.

 

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

char *readline (void) {
    char c, *str = NULL;
    int cnt = 0;
    
    do {
        c = fgetc (stdin);
        str = (char *) realloc (str, sizeof (char) * (cnt + 1));
        str[cnt++] = c;
    } while (c != '\n');

    str[cnt - 1] = '\0';

    return str;
}

void inver (unsigned int *v, int n) {
    int i;
    unsigned int tmp;
    for (i = 0; i < n/2; ++i) {
        tmp = v;
        v = v[n-1-i];
        v[n-1-i] = tmp;
    }
    
    return;
}


int funcao2 (int n, int k, int cnt) {
        int i, x;
        for (i = 0; i < cnt; ++i) {
                x = n%10;
                n/=10;
        if (i == k) break;
        }
        return x;
}

void funcao (unsigned int *t, int n, int k) {
    int cnt = 0, i;
    unsigned int x;
        for (i = 0; i < n; ++i) {
        x = t;
                while (x != 0) {
                        x/=10;
                        cnt++;
                }
                t = funcao2 (t, k, cnt);
                k = t;
        }
        return;
}

int main () {
    char *name;
    int op, i;
    name = readline();
    FILE *f = fopen (name, "rb");
    scanf ("%d", &op);
    if (op == 1) {
        fseek (f, 0, SEEK_END);
        long int tam = ftell(f);
        rewind(f);
        tam/=sizeof(unsigned int);
        unsigned int *p;
        int k = atoi(name);
        p = malloc (sizeof(unsigned int) * tam);
        int result = fread(p, sizeof(unsigned int), tam, f);
        inver(p, tam);
        funcao (p, tam, k);
        for (i = 0; i < tam; ++i) printf ("%d", p);
        printf ("\n");    
        free(p);
    }
    free (name);
    fclose (f);
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...