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"); }