View Full Version : [Problema] IF's mal feitos


frog
04-07-2006, 18:56
Ola a todos!

Como este forum me tem ajudade imenso, decedi perguntar outra coisa aqui...:-D

Eu ja pus esta duvida no P@P, e eles respodenderam-me, mas eu nao fiquei muito esclarecido, e alem disso deram-me um codigo reformulado mas, nao fazia a mesma coisa que o que eu queria que fizesse!(Atencao: Eu nao estou a criticar o P@P, euso queria outras opiniões:))

Eu gostava no meu codigo de ter um else, para se o numero fosse diferente e 1,2,3 ele dissese numero incorecto , alem disso tenho um grande problema que e o IVA aparece sempre 0

Aqui vai o codigo, abraços

#include <stdio.h>

int main ()
{
float a;
int iva,custo_total;
printf (http://www.opengroup.org/onlinepubs/009695399/functions/printf.html)("Escolha:\n[1] para produtos comerciais\n[2] para roupa, e artigos para o lar\n[3] para comida\n\n>>");
scanf("%f" , &a);
if (a==1)
iva = 100 / custo_total * 21;

if (a==2)
iva = 100 / custo_total * 12;
if (a==3)
iva = 100 / custo_total* 5;

printf (http://www.opengroup.org/onlinepubs/009695399/functions/printf.html)("Quanto custa o produto?\n\n>> ");
scanf("%d" , &custo_total);
printf (http://www.opengroup.org/onlinepubs/009695399/functions/printf.html)(" O IVA do produto e: %d" , iva);
getch();



}

P.S-Copiei directamente do P@P, por isso e que ficou as cores!

MaxDamage
04-07-2006, 19:14
#include <stdio.h>

int main ()
{
int a, iva, custo_total;

printf("Escolha:\n[1] para produtos comerciais\n[2] para roupa, e artigos para o lar\n[3] para comida\n\n>>");
scanf("%d" , &a);

printf("Quanto custa o produto?\n\n>> ");
scanf("%d" , &custo_total);

if (a==1)
iva = 100 / custo_total * 21;
else if (a==2)
iva = 100 / custo_total * 12;
else if (a==3)
iva = 100 / custo_total* 5;
else
printtf(" msg de erro \n ");

printf(" O IVA do produto e: %d" , iva);
getch();
}


deve ser qualquer coisa deste tipo. O problema é que estavas a calcular o iva quando ainda não tinhas o custo_total

fRaGoSo
04-07-2006, 20:50
Porque é que não utilizas um case, assim caso nao for 1, 2 ou 3 ele devolve-te o else.

frog
04-07-2006, 21:14
Eu ate sei usar switch...case
Mas agora comprei um livro novo de C e so quero usar aquilo que ate agora dei no livro, mas o que eu vou ler a seguir e ja o case por isso, no meu proximo programa ja vou usar case

Cumps

xplor
04-07-2006, 21:56
acho que seria também boa politica utilizares a variavel "a" como um inteiro e não como um float.

frog
04-07-2006, 22:32
Porque?
Eu so usei float caso o preço fosse com casas decimais!

Tuaregue
04-07-2006, 23:41
só que a variável "a", é a variável que controla o input do menu, por isso int serve muito bem e não utiliza tanta memória (não é que isso seja problema a não ser que estejas num 286/386 e afins), float deverias usar para o custo_total e para o iva.

O IVA é zero, porque o valor da variável IVA resulta de uma operação matemática.

iva = 100 / custo_total * 21 => custo_total = 0

Isto é pura matemática, deverias inicializar o custo_total com um valor diferente de 0 antes de aplicares a formula do iva (olha para o código do MaxDamage)

xplor
05-07-2006, 01:39
só que a variável "a", é a variável que controla o input do menu, por isso int serve muito bem e não utiliza tanta memória (não é que isso seja problema a não ser que estejas num 286/386 e afins), float deverias usar para o custo_total e para o iva.

O IVA é zero, porque o valor da variável IVA resulta de uma operação matemática.

iva = 100 / custo_total * 21 => custo_total = 0

Isto é pura matemática, deverias inicializar o custo_total com um valor diferente de 0 antes de aplicares a formula do iva (olha para o código do MaxDamage)

e nem sempre quando as variaveis não são inicializadas o seu conteudo é zero, cmg tem sempre lixo.

a melhor solução é perguntar ao utilizador o custo total do produto antes de calcular o iva

Tuaregue
05-07-2006, 10:46
e nem sempre quando as variaveis não são inicializadas o seu conteudo é zero, cmg tem sempre lixo.


certo, isto é C. Ele poderia fazer era logo a inicialização das variáveis logo na declaração.

frog
05-07-2006, 11:28
Obrigado pelas respostas

Cumps