Qual é o erro? [RESOLVIDO]

1. Qual é o erro? [RESOLVIDO]

ian cléver sales fernandes
ianclever

(usa Arch Linux)

Enviado em 23/02/2013 - 19:50h

estou começando agora a programar em c, e acabei de fazer um programa para fornecer um menu de escolha de produtos e calculo do preço da conta, a meu ver está tudo certo mas as opções 3 e 4 não me retornam um valor verdadeiro, retorna um número muito acima do normal, abaixo o código:


#include <stdio.h>

main()
{
int x,quant_batata,quant_cheeseburguer,quant_hamburguer,quant_milkshake,quant_refrigerante;
int b,c,h,m,r;
float batata,cheeseburguer,hamburguer,milkshake,refrigerante,total;
printf("\n\t\t\t ################################################## Mona's Burguer ##################################################");
printf("\n\t\t\t| |");
printf("\n\t\t\t| 1) Batata Frita ------------------------------- R$ 5.00 |");
printf("\n\t\t\t| 2) Cheesebúrguer ------------------------------- R$ 4.50 |");
printf("\n\t\t\t| 3) Hambúrguer ------------------------------- R$ 3.50 |");
printf("\n\t\t\t| 4) Milkshake ------------------------------- R$ 2.80 |");
printf("\n\t\t\t| 5) Refrigerante ------------------------------ R$ 1.50 |");
printf("\n\t\t\t| 6) Sair |");
printf("\n\t\t\t| |");
printf("\n\t\t\t#####################################################################################################################");
while(1)
{

printf("\n\n\t\t Digite a opção desejada: ");
scanf("%d",&x);
if(x==1)
{
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_batata);
b++;
batata=(quant_batata*b)*5.00;
}
if(x==2)
{
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_cheeseburguer);
c++;
cheeseburguer=(quant_cheeseburguer*c)*4.50;
}
if(x==3)
{
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_hamburguer);
h++;
hamburguer=(quant_hamburguer*h)*3.50;
}
if(x==4)
{
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_milkshake);
m++;
milkshake=(quant_milkshake*m)*2.80;
}
if(x==5)
{
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_refrigerante);
r++;
refrigerante=(quant_refrigerante*r)*1.50;
}
if(x==6)
{
break;
}
}
total=(batata+0)+(cheeseburguer+0)+(hamburguer+0)+(milkshake+0)+(refrigerante+0);
printf("\n\t\t\t o total é %.2f\n",total);

}



  


2. Re: Qual é o erro? [RESOLVIDO]

João Victor
vikitor566

(usa Fedora)

Enviado em 23/02/2013 - 20:25h

Tente usar a função getchar() sempre antes de ler algum valor.C não possui coletor de lixo e faz uma confusão com o buffer do teclado. Se você estiver começando a programar agora recomendo dar uma olhanda em python é uma linguagem bem tranquila de trabalhar e também poderosa.


3. Re: Qual é o erro? [RESOLVIDO]

ian cléver sales fernandes
ianclever

(usa Arch Linux)

Enviado em 23/02/2013 - 20:56h

vikitor566 escreveu:

Tente usar a função getchar() sempre antes de ler algum valor.C não possui coletor de lixo e faz uma confusão com o buffer do teclado. Se você estiver começando a programar agora recomendo dar uma olhanda em python é uma linguagem bem tranquila de trabalhar e também poderosa.


bom talvez seja isso é que esse é o meu terceiro programa, eu to começando mesmo, primeiro período ciências da computação, ainda não cheguei a ver essa função getchar() em c, esse é um exercício, o intuito dele é só fixar o while, não vale nota mas é bom aprender senão depois eu me ferro.
Eu achei o email do prof vou ver se ele me da uma força, ma de qualquer forma obrigado pela ajuda.



4. Re: Qual é o erro? [RESOLVIDO]

euteste da silva
foxbit3r

(usa Solaris)

Enviado em 24/02/2013 - 10:01h

O erro tá dando numas coisas q vc inventou que não tem.

Olha só

printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_hamburguer);
h++;
hamburguer=(quant_hamburguer*h)*3.50;


Por que você está você está colocando esse "h" se vc já está solicitando a quantidade? Ele tá ai de bobeira.

E no final:


total=(batata+0)+(cheeseburguer+0)+(hamburguer+0)+(milkshake+0)+(refrigerante+0)


O que você quis dizer com isso?

Arranque esses zeros e tira o h lá de cima que funciona sem problemas.



5. Re: Qual é o erro? [RESOLVIDO]

ian cléver sales fernandes
ianclever

(usa Arch Linux)

Enviado em 24/02/2013 - 11:53h

foxbit3r escreveu:

O erro tá dando numas coisas q vc inventou que não tem.

Olha só

printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_hamburguer);
h++;
hamburguer=(quant_hamburguer*h)*3.50;


Por que você está você está colocando esse "h" se vc já está solicitando a quantidade? Ele tá ai de bobeira.

E no final:


total=(batata+0)+(cheeseburguer+0)+(hamburguer+0)+(milkshake+0)+(refrigerante+0)


O que você quis dizer com isso?

Arranque esses zeros e tira o h lá de cima que funciona sem problemas.


bom o \t (segundo o prof) significa um tab o \n é para descer uma linha, eu tive analisando aqui, quebrei a cabeça um bocado mas descobri.

e os +0 é pq eu estava em dúvida se eu não colocasse algum valor nas opções se iria dar erro na variável valor, mas eu lembrei que "lixo"+0="lixo".
Mesmo assim valeu pela ajuda.


6. Re: Qual é o erro? [RESOLVIDO]

ian cléver sales fernandes
ianclever

(usa Arch Linux)

Enviado em 24/02/2013 - 11:55h

quebrei a cabeça aqui mais resolvi, obrigado pela ajuda de todos.
aqui o resultado:


#include <stdio.h>

main()
{
int x,quant_batata,quant_cheeseburguer,quant_hamburguer,quant_milkshake,quant_refrigerante;
int quant_v_batata,quant_v_cheeseburguer,quant_v_hamburguer,quant_v_milkshake,quant_v_refrigerante;
int b,c,h,m,r;
float batata,cheeseburguer,hamburguer,milkshake,refrigerante,total;
printf("\n\t\t\t|################################################## Mona's Burguer #################################################|");
printf("\n\t\t\t| |");
printf("\n\t\t\t| 1) Batata Frita ------------------------------- R$ 5.00 |");
printf("\n\t\t\t| 2) Cheesebúrguer ------------------------------- R$ 4.50 |");
printf("\n\t\t\t| 3) Hambúrguer ------------------------------- R$ 3.50 |");
printf("\n\t\t\t| 4) Milkshake ------------------------------- R$ 2.80 |");
printf("\n\t\t\t| 5) Refrigerante ------------------------------ R$ 1.50 |");
printf("\n\t\t\t| 6) Sair |");
printf("\n\t\t\t| |");
printf("\n\t\t\t|####################################################################################################################|");
while(100000000000000000)
{

printf("\n\n\t\t Digite a opção desejada: ");
scanf("%d",&x);
if(x==1)
{
b++;
if(b==1)
{
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_batata);
batata=quant_batata*5.00;
}
else
{
quant_v_batata=quant_batata;
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_batata);
batata=(quant_v_batata+quant_batata)*5.00;

}
}
if(x==2)
{
c++;
if(c==1)
{
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_cheeseburguer);
cheeseburguer=(quant_cheeseburguer*c)*4.50;
}
else
{
quant_v_cheeseburguer=quant_cheeseburguer;
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_cheeseburguer);
cheeseburguer=(quant_v_cheeseburguer+quant_cheeseburguer)*4.50;

}
}
if(x==3)
{
h++;
if(h==1)
{
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_hamburguer);
hamburguer=quant_hamburguer*3.50;
}
else
{
quant_v_hamburguer=quant_hamburguer;
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_hamburguer);
hamburguer=(quant_v_hamburguer+quant_hamburguer)*3.50;
}
}
if(x==4)
{
m++;
if(m==1)
{
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_milkshake);
milkshake=quant_milkshake*2.80;
}
else
{
quant_v_milkshake=quant_milkshake;
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_milkshake);
milkshake=(quant_v_milkshake+quant_milkshake)*2.80;
}
}
if(x==5)
{
r++;
if(r==1)
{
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_refrigerante);
refrigerante=(quant_refrigerante*r)*1.50;
}
else
{
quant_v_refrigerante=quant_refrigerante;
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_refrigerante);
refrigerante=(quant_v_refrigerante+quant_refrigerante)*1.50;
}
}
else
if(x==6)
{
break;
}
}
total=batata+cheeseburguer+hamburguer+milkshake+refrigerante;
printf("\n\t\t\t o total é %.2f\n",total);

}




7. Re: Qual é o erro? [RESOLVIDO]

ian cléver sales fernandes
ianclever

(usa Arch Linux)

Enviado em 24/02/2013 - 12:26h

ops...

mais uma pequena implementação e agora sim, testado e funcional:


#include <stdio.h>

main()
{
int x,quant_batata,quant_cheeseburguer,quant_hamburguer,quant_milkshake,quant_refrigerante;
int quant_v_batata,quant_v_cheeseburguer,quant_v_hamburguer,quant_v_milkshake,quant_v_refrigerante;
int b,c,h,m,r;
float batata,cheeseburguer,hamburguer,milkshake,refrigerante,total;
printf("\n\t\t\t|################################################## Mona's Burguer #################################################|");
printf("\n\t\t\t| |");
printf("\n\t\t\t| 1) Batata Frita ------------------------------- R$ 5.00 |");
printf("\n\t\t\t| 2) Cheesebúrguer ------------------------------- R$ 4.50 |");
printf("\n\t\t\t| 3) Hambúrguer ------------------------------- R$ 3.50 |");
printf("\n\t\t\t| 4) Milkshake ------------------------------- R$ 2.80 |");
printf("\n\t\t\t| 5) Refrigerante ------------------------------ R$ 1.50 |");
printf("\n\t\t\t| 6) Sair |");
printf("\n\t\t\t| |");
printf("\n\t\t\t|####################################################################################################################|");
while(100000000000000000)
{

printf("\n\n\t\t Digite a opção desejada: ");
scanf("%d",&x);
if(x==1)
{
b++;
if(b==1)
{
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_batata);
batata=quant_batata*5.00;
}
else
{
quant_v_batata=quant_batata;
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_batata);
batata=(quant_v_batata+quant_batata)*5.00;
quant_batata=quant_v_batata+quant_batata;

}
}
if(x==2)
{
c++;
if(c==1)
{
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_cheeseburguer);
cheeseburguer=(quant_cheeseburguer*c)*4.50;
}
else
{
quant_v_cheeseburguer=quant_cheeseburguer;
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_cheeseburguer);
cheeseburguer=(quant_v_cheeseburguer+quant_cheeseburguer)*4.50;
quant_cheeseburguer=quant_v_cheeseburguer+quant_cheeseburguer;

}
}
if(x==3)
{
h++;
if(h==1)
{
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_hamburguer);
hamburguer=quant_hamburguer*3.50;
}
else
{
quant_v_hamburguer=quant_hamburguer;
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_hamburguer);
hamburguer=(quant_v_hamburguer+quant_hamburguer)*3.50;
quant_hamburguer=quant_v_hamburguer+quant_hamburguer;
}
}
if(x==4)
{
m++;
if(m==1)
{
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_milkshake);
milkshake=quant_milkshake*2.80;
}
else
{
quant_v_milkshake=quant_milkshake;
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_milkshake);
milkshake=(quant_v_milkshake+quant_milkshake)*2.80;
quant_milkshake=quant_v_milkshake+quant_milkshake;
}
}
if(x==5)
{
r++;
if(r==1)
{
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_refrigerante);
refrigerante=(quant_refrigerante*r)*1.50;
}
else
{
quant_v_refrigerante=quant_refrigerante;
printf("\n\t\t\t Digite a quantidade desejada: ");
scanf("%d",&quant_refrigerante);
refrigerante=(quant_v_refrigerante+quant_refrigerante)*1.50;
quant_refrigerante=quant_v_refrigerante+quant_refrigerante;
}
}
else
if(x==6)
{
break;
}
}
total=batata+cheeseburguer+hamburguer+milkshake+refrigerante;
printf("\n\t\t\t o total é %.2f\n",total);

}







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts