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!