Ir para conteúdo

POWERED BY:

Arquivado

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

Morse

Erro do sistema ao executar código..

Recommended Posts

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

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

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

×

Informação importante

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