Ir ao conteúdo
  • Cadastre-se

Problema com switch linguagem C


Ledfullhd

Posts recomendados

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?

 

Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...