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.
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;
}
Pergunta
sloncomplex
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
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.