Ir ao conteúdo
  • Cadastre-se

[Duvida]Função não retorna valor


tpiardi

Posts recomendados

Eu estou aqui a duas horas tentando, mas não consigo fazer a função CalculeVendas retornar o valor, para que o programa continue executando, alguém ai faz ideia de o que está errado?


#include <stdio.h>
#include <stdlib.h>
#define MAX 100
//const int max = 100;

typedef struct tVinho
{
char nome, nomeFabricante, nomeDistribuidor, tipo;
int anoSafra, anoEnvasamento, unidades;
float preco;
} tVinho;

void leiaVinho(tVinho vinho);
void escrevaVinho(tVinho vinho);
float calculeVendas(tVinho vinho);

// leitura de um registro de vinho
void leiaVinho(tVinho vinho)
{
printf("Digite o nome do vinho: ");
scanf("%s", &vinho.nome);
printf("Digite o nome do fabricante: ");
scanf("%s", &vinho.nomeFabricante);
printf("Digite o nome do Distribuidor: ");
scanf("%s", &vinho.nomeDistribuidor);
printf("Digite o tipo do vinho: ");
scanf("%s", &vinho.tipo);
printf("Digite o ano da safra: ");
scanf("%d", &vinho.anoSafra);
printf("Digite o ano do envasamento: ");
scanf("%d", &vinho.anoEnvasamento);
printf("Digite o preco do vinho: ");
scanf("%f", &vinho.preco);
printf("Digite a quantidade de unidades: ");
scanf("%d", &vinho.unidades);
}

// leitura de um registro de vinho
void escrevaVinho(tVinho vinho)
{
printf("O nome do vinho é: %s", vinho.nome);
printf("O nome do fabricante é: %s", vinho.nomeFabricante);
printf("O nome do distribuidor é: %s", vinho.nomeDistribuidor);
printf("O tipo do vinho é: %s", vinho.tipo);
printf("O ano da safra é: %d", vinho.anoSafra);
printf("O ano do envasamento é: %d", vinho.anoEnvasamento);
printf("O preco do vinho é: %f", vinho.preco);
printf("A quantidade de unidades é: %d", vinho.tipo);
}

// retorna o produto do preço pelo número de unidades vendidas }
float calculeVendas (tVinho vinho)
{
return (vinho.unidades * vinho.preco);
}

int main()
{
int i, numeroItens;
float somaVendas, maiorVenda, mediaVinhos;
tVinho vinho[MAX];

// leitura da relação de dados e cálculo da média e da maior venda }
printf("Digite a quantidade de itens :");
scanf("%d", &numeroItens);

somaVendas = 0;
maiorVenda = -1;

for (i = 0; i < numeroItens; i++)
{
leiaVinho(vinho[i]);
somaVendas = somaVendas + calculeVendas(vinho[i]);
if (calculeVendas(vinho[i]) > maiorVenda)
maiorVenda = calculeVendas(vinho[i]);
}
mediaVinhos = somaVendas/numeroItens;

//apresentação da melhor venda
for (i = 0; i <numeroItens; i++);
{
if (calculeVendas(vinho[i]) == maiorVenda)
escrevaVinho(vinho[i]);
}

return 0;
}

Link para o comentário
Compartilhar em outros sites

O seu problema é que você está passando um tVinho por valor, e não por referência. Só dá certo usar por valor se você for fazer operações que envolvam leitura, e não escrita em cima de alguma dos componentes da estrutura.

Acho que modificar a declaração funciona:

void leiaVinho(tVinho vinho)

vira

void leiaVinho(tVinho& vinho)

e por favor, modifique:


for (i = 0; i <numeroItens; i++);

por


for (i = 0; i <numeroItens; i++)

Entende? Se não, ele vai fazer i iterar até numeroItens e não fará nenhuma comparação, somente depois de terminar o for, quando i == numeroItens, e você não verá nada escrito na tela, já que não foi definido o vinho[numeroItens] e o cálculo não vai bater com maiorVenda.

Outra coisa:


typedef struct tVinho
{
char nome, nomeFabricante, nomeDistribuidor, tipo;
int anoSafra, anoEnvasamento, unidades;
float preco;
} tVinho;

Opa, as variáveis nome, nomeFabricante, nomeDistribuidor e tipo não podem ser somente char, elas devem ser algo do tipo char[tamanho], o que é chamado de string. Algo assim...


typedef struct tVinho
{
char nome[20], nomeFabricante[50], nomeDistribuidor[40], tipo[20];
int anoSafra, anoEnvasamento, unidades;
float preco;
} tVinho;

Se não vai dar algum erro de memória.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para 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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!