mmacedo 0 Denunciar post Postado Junho 26, 2012 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
GBecker 51 Denunciar post Postado Junho 26, 2012 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
Renato Utsch 24 Denunciar post Postado Junho 26, 2012 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
mmacedo 0 Denunciar post Postado Junho 28, 2012 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
GBecker 51 Denunciar post Postado Junho 29, 2012 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