Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

RenanOdilon

Busca de informação em arquivo binario

Recommended Posts

Galera esse é meu 1ª post, se errei alguma coisa é pq estou começando, nao me crucifiquem.... Bom a minha dúvida/erro e com relação a fazer uma busca em um arquivo binario(cadastro). Não estou conseguindo de jeito nenhum colocar uma variavel recebendo um valor digitado e depois comparar ele com o que esta no arquivo ex: produtos.dat. Aqui está o código da minha funçao:

 

void buscar(){
struct r1 {
int codpro;
char despro[41];
int estoque;
float pr;
} produtos[tam1];
FILE *arq;
int i, cod;
if((arq = fopen ("produtos.dat","r")) == NULL)
{
printf("Socorro!! O protudos.dat não abre!!!\n");
exit(1);
}
printf ("Informe o codigo desejado: ");
scanf("%d",&cod);
//rewind(arq); não sei se isso é prático. Creio que não, mas...
while(!feof(arq){
fread(&produtos.codpro,sizeof(produtos.codpro),1,arq);
fread(&produtos.despro,sizeof(produtos.despro),41,arq);
fread(&produtos.estoque,sizeof(produtos.estoque),1,arq);
fread(&produtos.pr,sizeof(produtos.pr),1,arq);
if(cod==produtos.codpro){
printf ("Descricao do produto: %s",produtos.despro);
printf ("Quantidade em estoque: %d",produtos.estoque);
printf ("Preco do produto: %.2f\n",produtos.pr);
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

no seu registro você tem um campo de tamanho variavel, que é a descrição do produto, tem 41 caracteres, vamos supor que você só digite 10 caracteres, só serão escritos 10 bytes nesse campo do seu arquivo binário, só que quando você tá fazendo a leitura, c tá lendo como se tivesse 41 bytes, o ideal seria que você tivesse um campo no inicio de cada registro informando o tamanho daquele registro(que ai vc saberia quantos bytes existem no campo variavel) ou então que você assegure que antes de escrever o "despro" você termine de preencher ele com algum caracter... para que ele sempre tenha os 41 bytes

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.