Boa noite a todos.
Escrevi um programa em linguagem C, que não está rodando corretamente. Consigo gravar usando a opção 1 , mas quando tento buscar o produto usando a opção 2 imediatamente recebo e mensagem de erro: falha de segmentação. Já li e reli inúmeras vezes mas não consegui corrigir meu código.
Alguém sabe onde está o erro?
Desde já grato pela atenção.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
typedef struct{
char nome[40];
int peso;
float preço;
}Produto;
void limparBuffer(void){
char ch;
while((ch = getchar()) != '\n' && ch != EOF){
}
}
Produto* getProdutos(void){
Produto* produtos;
int qtd_Produtos;
system("clear");
printf("Informe quantos produtos deseja cadastrar: ");
scanf("%d", &qtd_Produtos);
limparBuffer();
produtos = malloc(sizeof(Produto) * qtd_Produtos);
for(int cont = 0; cont < qtd_Produtos; cont++){
system("clear");
printf("Nome do produto: ");
fgets((produtos + cont)->nome, 40, stdin);
printf("Peso Produto: ");
scanf("%d", &(produtos + cont)->peso);
printf("Valor Produto: ");
scanf("%f", &(produtos + cont)->preço);
limparBuffer();
}
system("clear");
return produtos;
}
int buscarProduto(Produto* produtos, const char* nome_Produto){
int encontrado = 0;
while(produtos != NULL){
if(strcmp((produtos)->nome, nome_Produto)){
}else{
encontrado = 1;
break;
}
produtos++;
}
return encontrado;
}
Produto retornarProduto(Produto* produtos, const char *nomeProduto){
Produto produto;
while(produtos != NULL){
if(buscarProduto(produtos, nomeProduto)){
produto = *(produtos);
}
produtos++;
}
return produto;
}
void exibirProduto(Produto* produtos){
char nome_Produto[40];
Produto produto;
printf("Digite nome produto procurado: ");
fgets(nome_Produto, 40, stdin);
system("clear");
if(buscarProduto(produtos, nome_Produto)){
produto = retornarProduto(produtos, nome_Produto);
printf("Nome Produto: %s", produto.nome);
printf("Peso: %d\n", produto.peso);
printf("Valor: %.2f\n", produto.preço);
}else{
puts("Produto não encontrado!");
}
sleep(5);
}
int main(int argc, char* argv[]){
Produto *produtos;
int escolha = 0;
do
{
system("clear");
printf("Menu Principal\n\n");
printf("(1) - Cadastrar Produtos\n");
printf("(2) - Buscar Produtos\n");
printf("(3) - Encerrar Programa\n\n\n");
printf("?: ");
scanf("%i", &escolha);
switch (escolha)
{
case 1: produtos = getProdutos();
break;
case 2:
exibirProduto(produtos);
}
} while (escolha != 3);
system("clear");
puts("Programa Encerrado!");
sleep(4);
return 0;
}