Ir ao conteúdo
  • Cadastre-se

BloodSoul

Membro Júnior
  • Posts

    2
  • Cadastrado em

  • Última visita

Reputação

1
  1. 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"); }
  2. BloodSoul

    SizeOf

    Você está dizendo para o printf entregar o tamanho do próprio ponteiro. Se você realmente quer usar um ponteiro, então o resultado ficaria assim: #include <stdio.h>#include <stdlib.h>struct Teste { int a; char b[12];} teste;int main(){ struct Teste * p = &teste; printf("'b' = %d bytes.\n", sizeof p->; return 0;}

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...