Ir ao conteúdo
  • Cadastre-se
Ledfullhd

Problema com switch linguagem C

Recommended Posts

To tentando fazer um programa so que ele não ta retornando nem o valor e nem sabor do sorvete

 

1-   Uma sorveteria vende quatro sabores de sorvetes: M – Morango; C - Creme; F – Flocos; A – Ameixa. Independente do sabor do sorvete, a bola de sorvete custa R$ 1,50. O algoritmo deve ler a quantidade de bolas e a sigla do sabor do sorvete, e retornar o valor da conta, seguido do nome do sabor do sorvete comprado, sendo que o cliente compra somente um sabor de sorvete.

 

Meu codigo ta assim

 

#include <stdio.h>
#include <stdlib.h>
 
main()
 
{
int bolas;
char sabor;
 
printf("Digite a quantidade de bolas ");
scanf("%i", &bolas);
 
printf("Digite o sabor ");
scanf("%c", &sabor);
 
switch(sabor)
 
{
case 'm':case 'M':
printf("Conta R$ .2f Morango",bolas*1.5);
break;
 
case 'c':case 'C':
printf("Conta R$ .2f Creme",bolas*1.5);
break;
 
 
case 'f':case 'F':
printf("Conta R$ .2f Flocos",bolas*1.5);
break;
 
case 'a':case 'A':
printf("Conta R$ .2f Ameixa",bolas*1.5);
break;
 
default:
printf("Invalido");
 
 
}
 
system("pause>null");
}
 
O que ta errado?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Suponho que o seu primeiro scanf até consegue obter o número corretamente, porém quando chega no segundo, ele passa direto e termina o seu código. Este é um problema chato da função scanf.

Vou tentar te explicar melhor usando o seu próprio codigo:

    int bolas;    char sabor;    printf("Digite a quantidade de bolas \n");    scanf("%i", &bolas);    printf("Digite o sabor \n");    scanf("%c", &sabor);

Quando você rodar o programa, a primeira coisa que ele vai pedir é "Digite a quantidade de bolas", então o primeiro scanf vai aguardar o seu comando. Assim que você digitar um número... o que fará depois? Vai apertar Enter!  O "Enter" é considerado também um caractere. Como resultado, o primeiro scanf vai conseguir pegar um número corretamente, porém o segundo vai obter o "Enter" porque o mesmo ficou guardado no "buffer". Por isso que o segundo scanf é "pulado" e o seu código é finalizado.

 

Um outro ponto interessante também é que, se você usasse o segundo scanf como "%d", ele não iria fazer isso. Porque o %d obtém somente números, isto é, os caracteres ou "whitespaces" são ignorados. O %c aceita os caracteres especiais e "white spaces".

 

Para solucionar/contornar este problema, você simplesmente precisa por um espaço antes do %c. Desta forma o scanf vai ignorar o que havia no "buffer".

    int bolas;    char sabor;    printf("Digite a quantidade de bolas \n");    scanf("%i", &bolas);    printf("Digite o sabor \n");    scanf(" %c", &sabor);

Logo, o seu código voltará a funcionar normalmente. Eu aproveitei e coloquei % nos printfs dentro do switch para mostrar o número correto para o usuário e usei \n para pular linhas nos primeiros printfs. Aqui está:

    int bolas;    char sabor;    printf("Digite a quantidade de bolas \n");    scanf("%i", &bolas);    printf("Digite o sabor \n");    scanf(" %c", &sabor);    switch(sabor)    {        case 'm':case 'M':        printf("Conta R$ %.2f Morango", bolas*1.5);        break;        case 'c':case 'C':        printf("Conta R$ %.2f Creme", bolas*1.5);        break;        case 'f':case 'F':        printf("Conta R$ %.2f Flocos", bolas*1.5);        break;        case 'a':case 'A':        printf("Conta R$ %.2f Ameixa", bolas*1.5);        break;        default:        printf("Invalido");    }
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sinalize a resolução do problema escolhendo-a como melhor resposta.

Com isso todos no fórum entenderam.

Está é a lógica penso eu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×