Morse 0 Denunciar post Postado Agosto 25, 2009 Fala galera.. To com uma duvida aqui.. nao consigo achar o erro.. Toda vez que eu executo esse codigo, ele dá erro no sistema e o Windows diz que o programa precisa ser encerrado, provavelmente na hora em que vai gravar os dados no arquivo.. Alguem pode me dar uma luz do que está acontecendo, e de quebra me informar se o meu modo de registro no arquivo está correto? #include <stdlib.h> #include <stdio.h> /* STRUCTS UTILIZADAS NO SISTEMA */ struct produto { char nomeprod[50]; int codprod; float custoprod; }produto; /* PROTOTIPO DE FUNCOES UTILIZADAS NO PROGRAMA*/ void le (void); void grava(void); /* PARTE PRINCIPAL DO PROGRAMA */ main() { grava(); le(); } /* FUNCOES UTILIZADAS AO LONGO DO PROGRAMA */ void le(void) { struct produto p; FILE *arq; if((arq = fopen("PRODUTOS.DAT", "rb")) == NULL) printf("Erro ao abrir o arquivo PRODUTOS.DAT"); while(fread(&p, sizeof(produto), 1, arq)!=0) printf("%d - %s - %.2f", p.codprod, p.nomeprod, p.custoprod); fclose(arq); } void grava(void) { struct produto p; FILE *arq; if((arq = fopen("PRODUTOS.DAT", "ab+")) == NULL) printf("Erro ao abrir o arquivo PRODUTOS.DAT"); printf("\nNome...: "); gets(p.nomeprod); printf("\nID.....: "); scanf("%d", p.codprod); printf("\nPreco..: "); scanf("%f", p.custoprod); fwrite(&p, sizeof(produto), 1, arq); fclose(arq); } Desde já agradeço. Moacir Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Agosto 25, 2009 na hora dos scanf acrescente um '&' antes das variaveis. outro hábito que já é bom você ir se acostumando é: int main(){ . . return 0; } []s Compartilhar este post Link para o post Compartilhar em outros sites
Antharaz 3 Denunciar post Postado Setembro 3, 2009 Acho que o quitZAUMMM esqueceu de falar, mas é bom você usar %*c no scan para limpeza de buffer... assim você não terá problemas com sujeira de buffer assim como eu já tive. ex: scanf("%f%*c", &p.custoprod); Compartilhar este post Link para o post Compartilhar em outros sites