-1
I’m having a little problem here in my code, well "everything" works normal except when I type that the struct vector size will be 2, program simply stops working.
#include <stdio.h>
#include <stdlib.h>
typedef struct produto{
int id;
char nome [20];
int qtdEstoque;
float valorVenda;
float valorCusto;
}produto;
void leitura(struct produto *lista, int size){
int i;
for(i = 0; i <= size; i++){
fflush(stdin);
printf("Nome: ");
gets(lista[i].nome);
printf("Id: ");
scanf("%d", &lista[i].id);
printf("Quantidade em estoque: ");
scanf("%d", &lista[i].qtdEstoque);
printf("Valor da venda: ");
scanf("%f", &lista[i].valorVenda);
printf("Valor do custo: ");
scanf("%f", &lista[i].valorCusto);
printf("\n");
}
}
void imprimir(struct produto *lista, int size){
int i;
printf("*** IMPRIMINDO TODOS OS DADOS ***\n\n");
for(i = 0; i <= size; i++){
printf("Nome: %s", lista[i].nome);
printf("\nId: %d", lista[i].id);
printf("\nQtd Estoque: %d", lista[i].qtdEstoque);
printf("\nValor Venda: %2.f", lista[i].valorVenda);
printf("\nValor Custo: %2.f", lista[i].valorCusto);
printf("\n\n");
}
}
void totalMenor(struct produto *lista, int size){
int i;
printf("*** PRODUTOS COM ESTOQUE MENOR QUE 5 ***\n\n");
for(i = 0; i <= size; i++){
if(lista[i].qtdEstoque < 5){
printf("Nome: %s", lista[i].nome);
printf("\nId: %d", lista[i].id);
printf("\n\n");
}
}
}
void maiorLucro(struct produto *lista, int size){
float maior = 0;
int endereco = 0;
int i;
printf("\n*** PRODUTO MAIOR LUCRO ***\n\n");
for(i = 0; i <= size; i++){
if(lista[i].valorCusto > maior){
maior = lista[i].valorCusto;
endereco = i;
}
}
printf("Produto com maior lucro: \n\nNome: %s\nQuantidade em estoque:
%d", lista[endereco].nome, lista[endereco].qtdEstoque);
}
void menorLucro(struct produto *lista, int size){
float menor = 9999;
int endereco = 0;
int i;
printf("\n\n*** PRODUTO MENOR LUCRO ***\n\n");
for(i = 0; i <= size; i++){
if(lista[i].valorCusto < menor){
menor = lista[i].valorCusto;
endereco = i;
}
}
printf("\nProduto com menor lucro: \n\nNome: %s\nQuantidade em estoque:
%d", lista[endereco].nome, lista[endereco].qtdEstoque);
}
int main(){
int tamanho;
printf("Digite o tamanho da estrutura: ");
scanf("%d", &tamanho);
struct produto *produtos[tamanho];
produtos[0] = (struct produto *) malloc ( tamanho * sizeof(struct
produto));
leitura(produtos[tamanho],tamanho);
imprimir(produtos[tamanho],tamanho);
totalMenor(produtos[tamanho],tamanho);
maiorLucro(produtos[tamanho],tamanho);
menorLucro(produtos[tamanho],tamanho);
free(produtos[0]);
}
Maik thank you very much, it worked ! but after performing all the functions the program stops working the same way.
– Gabriel Neri
Your for(i = 0; i <= size; i++) should be: for(i = 0; i < size; i++) the way you did, you are accessing memory not available.
– Maik Catrinque