Ir para conteúdo

POWERED BY:

Arquivado

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

mmacedo

Arquivos Binários

Recommended Posts

Opa, estou tendo uma dúvida.. Não consigo printar os valores da estrutura que está no arquivo binário! Alguém sabe onde estou errando? Valeeu!

 

#include <stdio.h>
#include <string.h>

typedef struct filme {
       char genero[10];
       char titulo[15];
       int ano; 
       int nota;
       } filme;

int main ()
{
   filme vet[2];
   int count; // contador
   FILE *bin;

   bin = fopen("arquivinho.txt", "w+");

   for (count=0; count<2; count++)
   {
       printf("Genero: ");
       gets(vet[count].genero);
       printf("Titulo: ");
       gets(vet[count].titulo);
       printf("Ano de lancamento: ");
       scanf("%d", &vet[count].ano);
       fflush(stdin);
       printf("Nota: ");
       scanf("%d", &vet[count].nota);
       fflush(stdin);

       system("cls");
   }

   fwrite(&vet, sizeof(filme), 2, bin);

   fread(&vet, sizeof(filme), 2, bin);

   for (count=0; count<2; count++)
   {
       printf("\n\nGenero: %s", vet[count].genero);
       printf("\nTitulo: %s", vet[count].titulo);
       printf("\nAno de lancamento: %d", vet[count].ano);
       printf("\nNota: %d", vet[count].nota);
   }

   fclose(bin);
   getch();
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem que passar o índice do vetor ande vai ler

 

E não use gets e fflush. Seus usos são perigosos.

Compartilhar este post


Link para o post
Compartilhar em outros sites
E não use gets e fflush. Seus usos são perigosos.

 

Quanto a gets(), seu uso é realmente perigoso.

 

Mas quanto a fflush(), só não deve ser utilizado quanto a buffers de entrada. O seu uso foi feito para buffers de saída, e não há nada de errado com ela.

 

Por exemplo, o código abaixo é válido e até recomendado para limpar o stdout:

 

fflush(stdout);

 

Mas não vale usar com buffers de entrada, como o stdin.

 

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa, valeu pela ajuda! :grin:

 

mas ainda estou tendo problemas.. nao consigo mexer muito bem nisso ainda..

aqui por exemplo, fiz uma struct e um vetor da mesma, e a seguinte função para preencher:

 

// função que registra um produto

void registra_produto(dados_produto *products) 
{
    int p = 0; // contador

    printf("\nNome: ");
    gets(products[p].nome);
    printf("Codigo: ");
    scanf("%l", &products[p].codigo);
    printf("Quantidade em estoque: ");
    scanf("%d", &products[p].estoque);
    printf("Preco unitario: R$ ");
    scanf("%f", &products[p].preco);
    p++;
}

 

dois problemas! primeiro que esse gets parece nunca funcionar, mas antes funcionava!

segunda coisa é que ao invés de '&products[p].preco' estava tentando colocar '&products[p]->preco' mas dessa maneira nao compila! alguém sabe o que é isso?

 

valeeu! abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

mmacedo,

 

dois problemas! primeiro que esse gets parece nunca funcionar, mas antes funcionava!

segunda coisa é que ao invés de '&products[p].preco' estava tentando colocar '&products[p]->preco' mas dessa maneira nao compila! alguém sabe o que é isso?

 

Quanto a sua primeira dúvida vou ficar lhe devendo a explicação, pois também não sei.

Quanto a segunda é o seguinte:

O operador & é utilizado para passagem do endereço de memória de uma variável/ponteiro.

Note que a função printf recebe como parâmetro um ponteiro. Fazendo &products[p]->preco, você está passando o endereço para o ponteiro do ponteiro.

Para isso, o parâmetro da função teria de ter essa forma:

int Exemplo(int** iNumero);  //ponteiro para ponteiro

 

Espero ter ajudado, FLW! :grin:

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.