Ir ao conteúdo
  • Cadastre-se

Duvidas em C++


Lemaria

Posts recomendados

Galera preciso resolver este programa, mas não sei o que estou fazendo de errado.  Faça um programa que solicite ao usuário digitar dois números 

quaisquer e ainda a operação que o mesmo deseja fazer: soma (+), subtração (-), multiplicação (*) ou divisão (/).
 Se o usuário informar qualquer outra operação que não seja uma destas quatro,  o sistema deve emitir um alerta de "operação não suportada".
 
eu fiz assim: 
int main(){       int a, b;     char oper;        printf("\nDigite um numero: ");    scanf("%d",&a);        printf("\nDigite um segundo numero: ");    scanf("%d",& ;        printf("\n\nDigite a operacao que deseja fazer: \n");    scanf("%c",&oper);                                      switch(oper){                case '+' : printf("Soma. \n");break;        case '-' : printf("Subtracao.\n" );break;        case '*' : printf("Multiplicacao.\n");break;        case '/' : printf("Divisao.\n" );break;        default  : printf("\nOperacao nao suportada.\n");}    system("pause");    return 0;   }
/*Aparece na tela para digitar os dois numero, digito até ai vai, quando aparece a mensagem digite a operação, ele nem roda os cases e vai direto para default: Operação nao suportada.
 
 
Alguém pode me ajudar?
*/
Link para o comentário
Compartilhar em outros sites

Maldito "scanf()". Sempre gerando confusão.  :P

 

Isso ocorre devido ao "lixo" que fica em memória, quando utilizada a função "scanf()".

 

Depois que digita o número e aperta o "ENTER", esse "ENTER" é o caracter que fica na memória (que nada mais é do que uma quebra de linha).

Quando faz a leitura novamente usando "scanf()", a função detecta esse "ENTER" na memória e o utiliza como sendo o valor digitado pelo usuário, gerando assim a quebra de linha 'desconhecida' (o famoso "passando batido").

 

Para solucionar esse problema, uma alternativa é descartar esse último caracter no momento da leitura.

Para isso, pode utilizar uma das duas maneiras abaixo:

scanf("%d%*c",&a); // "%*c" é a máscara que lê o último carácter, porém o ignora. ou então:scanf(" %d",&a); // Adicionando um espaço na frente da máscara "%d"

Att.

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!