[Problema] IF's mal feitos

frog

Power Member
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

Código:
[/COLOR][/COLOR][COLOR=#339933]#include <stdio.h>[/COLOR]
 
[COLOR=#993333]int[/COLOR] main [COLOR=#66CC66]([/COLOR][COLOR=#66CC66])[/COLOR]
[COLOR=#66CC66]{[/COLOR]
    [COLOR=#993333]float[/COLOR] a;
    [COLOR=#993333]int[/COLOR] iva,custo_total;
   [URL="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"][COLOR=#000066]printf[/COLOR][/URL][COLOR=#66CC66]([/COLOR][COLOR=#FF0000]"Escolha:[COLOR=#000099][B]\n[/B][/COLOR][1] para produtos comerciais[COLOR=#000099][B]\n[/B][/COLOR][2] para roupa, e artigos para o lar[COLOR=#000099][B]\n[/B][/COLOR][3] para comida[COLOR=#000099][B]\n[/B][/COLOR][COLOR=#000099][B]\n[/B][/COLOR]>>"[/COLOR][COLOR=#66CC66])[/COLOR];
   scanf[COLOR=#66CC66]([/COLOR][COLOR=#FF0000]"%f"[/COLOR] , &a[COLOR=#66CC66])[/COLOR];
   [COLOR=#B1B100]if[/COLOR] [COLOR=#66CC66]([/COLOR]a==[COLOR=#CC66CC]1[/COLOR][COLOR=#66CC66])[/COLOR]
   iva = [COLOR=#CC66CC]100[/COLOR] / custo_total * [COLOR=#CC66CC]21[/COLOR];
  
   [COLOR=#B1B100]if[/COLOR] [COLOR=#66CC66]([/COLOR]a==[COLOR=#CC66CC]2[/COLOR][COLOR=#66CC66])[/COLOR]
       iva = [COLOR=#CC66CC]100[/COLOR] / custo_total * [COLOR=#CC66CC]12[/COLOR];
   [COLOR=#B1B100]if[/COLOR] [COLOR=#66CC66]([/COLOR]a==[COLOR=#CC66CC]3[/COLOR][COLOR=#66CC66])[/COLOR]
       iva = [COLOR=#CC66CC]100[/COLOR] / custo_total* [COLOR=#CC66CC]5[/COLOR];
 
  [URL="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"][COLOR=#000066]printf[/COLOR][/URL][COLOR=#66CC66]([/COLOR][COLOR=#FF0000]"Quanto custa o produto?[COLOR=#000099][B]\n[/B][/COLOR][COLOR=#000099][B]\n[/B][/COLOR]>> "[/COLOR][COLOR=#66CC66])[/COLOR];
  scanf[COLOR=#66CC66]([/COLOR][COLOR=#FF0000]"%d"[/COLOR] , &custo_total[COLOR=#66CC66])[/COLOR];
  [URL="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"][COLOR=#000066]printf[/COLOR][/URL][COLOR=#66CC66]([/COLOR][COLOR=#FF0000]" O IVA do produto e: %d"[/COLOR] , iva[COLOR=#66CC66])[/COLOR];
  getch[COLOR=#66CC66]([/COLOR][COLOR=#66CC66])[/COLOR];
       
 
    
[COLOR=#66CC66]}

P.S-[COLOR=White]Copiei directamente do P@P, por isso e que ficou as cores![/COLOR]
[/COLOR][COLOR=Red][COLOR=White]
 
Código:
#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
 
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
 
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.

Código:
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)
 
Última edição:
Tuaregue disse:
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.

Código:
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
 
xplor disse:
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.
 
Back
Topo