Ir ao conteúdo
  • Cadastre-se
Jones Sabino

Problema: função de cadastro escrevendo as informações em arquivo binário

Recommended Posts

Boa tarde!

 

Estou criando um sistema simples de pedidos (projeto da faculdade).
Na função cadastro, utilizo uma estrutura para armazenar os dados de cada item.
O problema acontece a partir da segunda inserção, quando tento verificar se o código do produto já foi cadastrado, pois aparentemente a condição que defini não está sendo obedecida. 

Segue o código da função inteira abaixo para facilitar o entendimento, está comentada e a parte problemática em vermelho:

void cadastro(){
    typedef struct{
        int codProd;
        float preco;
        char nomeProd[50];
    }dados;

    FILE *arq;
    dados pedido, pedidoLido, pedidoArq; //Uso o pedidoArq para carregar a estrutura gravada no arquivo.
    int totalGravado=0;
    char opc;
    int vrf = 1;
    while (1){
        //Openning file
        arq = fopen("produtos.dat", "a+b");
        if(arq == NULL){
            system("cls");
            printf("\nErro na abertura do arquivo\n\n");
            getch();
            exit(1);
        }
        //Getting product code
        printf("\n\nDigite o código do produto: ");
        fflush(stdin);
        scanf("%i", &pedidoLido.codProd); //Armazena na estrutura pedidoLido, que mais adiante será comparada com a estrutura lida do arquivo, que armazeno em pedidoArq.

        while(vrf == 1){
            if (pedidoLido.codProd == fread(&pedidoArq, sizeof(dados), 1, arq)){ //compara se o codprod digitado já existe no arquivo. (Não sei se essa comparação funciona)
                printf("O código já existe! Escolha outro :\n");
                fflush(stdin);
                scanf("%i", &pedidoLido.codProd);
                fclose(arq);
                arq = fopen("produtos.dat", "a+b");
            }else{
                pedido.codProd = pedidoLido.codProd; //essa atribuição, por exemplo, não funciona pois quando leio as variáveis abaixo o valor não foi atribuído. 
                vrf = 0;
            }
        }
        //Getting product name
        printf("\n\nDigite o nome do produto: ");
        fflush(stdin);
        gets(pedido.nomeProd);
        //Getting product price
        printf("\n\nDigite o preco do produto: ");
        fflush(stdin);
        scanf("%f", &pedido.preco);
        //Debug
        printf("\n pedido.codprod       pedidoLido.codprod      pedidoArq.codProd          nomeprod              preco \n");
        printf("\n       %i                     %i                      %i                  %s                    %f   \n",
               pedido.codProd, pedidoLido.codProd, pedidoArq.codProd, pedido.nomeProd, pedido.preco);

        //Writing variables into a file
        totalGravado = fwrite(&pedido, sizeof(dados), 1, arq);
        if(totalGravado != 1){ //verifying errors in the recording
            system("cls");
            printf("\nErro na gravação do arquivo\n\n");
            getch();
            exit(1);
        }else{
            printf("\nDados gravados com sucesso\n\n");
            getch();
        }
        fclose(arq);//closing file
        system("cls");
      printf("\nDeseja cadastrar outro item? s/n");
        opc = getch();
          if(opc == 'n' || opc == 'N'){
              break;
          }
    }

Desde já agradeço a ajuda!

Obrigado, até mais!

Editado por DiF
Botão CODE <>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×