Quando imprimo a lista de produtos são impressos apenas o último item cadastrado e um lixo de memória.
#include <string.h>
#include <stdlib.h>
struct Produtos{
char nome[60];
float precoCompra;
float precoVenda;
float lucro;
};
float Lucro(float venda, float compra){
float lucro;
lucro = venda - compra;
lucro = (lucro / venda) * 100;
return lucro;
}
int main(){
struct Produtos produto[4];
int flag, aux = 0;
int contlucro20 = 0, contlucro2030 = 0, contlucro30 = 0;
int i;
while (flag != 0){
//Cadastrando produtos:
aux++;
for(i = 0; i < aux; i++){
fflush(stdin);
printf("\nProduto: "); fgets(produto[i].nome, 60, stdin);
printf("\nPreco de Compra: "); scanf("%f", &produto[i].precoCompra);
printf("\nPreco de Venda: "); scanf("%f", &produto[i].precoVenda);
produto[i].lucro = Lucro(produto[i].precoVenda, produto[i].precoCompra);
printf("\nLucro: %.2f%%", produto[i].lucro);
if (produto[i].lucro < 20){contlucro20++;}
else if (20 >= produto[i].lucro && produto[i].lucro <= 30){contlucro2030++;}
else if(produto[i].lucro > 30){contlucro30++;}
printf("\nDigite 0 para encerrar ou 1 para continuar: "); scanf("%d", &flag);
if(flag == 0){break;}
}
}
//Imprimindo lista de produtos:
printf("\nLista de produtos: \n");
for(i = 0; i < aux; i++){
printf("\nProduto: %s", produto[i].nome);
printf("\nPreco de Compra: %.2f", produto[i].precoCompra);
printf("\nPreco de Venda: %.2f", produto[i].precoVenda);
printf("\nLucro: %.2f%%\n", produto[i].lucro);
}
printf("\nNumero de produtos com lucro menor que 20%%: %d", contlucro20);
printf("\nNumero de produtos com lucro entre 20%% e 30%%: %d", contlucro2030);
printf("\nNumero de produtos com lucro maior que 30%%: %d", contlucro30);
return 0;
}