Ir ao conteúdo
  • Cadastre-se

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


Jones Sabino

Posts recomendados

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!

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...