Ir para conteúdo
Fórum Script Brasil

sloncomplex

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Posts postados por sloncomplex

  1. 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;
    }

     

×
×
  • Criar Novo...