Ir ao conteúdo

Posts recomendados

Postado

Boa noite programadores.

 

O programa proposto seria executar quatro operações básicas de uma calculadora com apenas dois valores dado pelo usuário.

Porém há um erro na minha programação onde não consigo digitar a operação escolhido pelo usuário. Segue a programação e o Erro.

Obrigado.

#include<stdio.h>

int main ()
{
    int x,y,resultado;
    char z;
    printf ("Maior valor: ");
    scanf ("%d",& x);
    printf ("Menor valor: ");
    scanf ("%d",& y);
    printf ("Indique a operacao:\nadicao +\nsubtracao -\nmultiplicacao *\ndivisao /\n ");    
    scanf ("%c",& z);
    
    switch ( z )
    {
        case '+' :
            resultado = x+y;
            printf ("Resultado: %c",resultado);
            break;
        case '-' :
            resultado= x-y;
            printf ("Resultado: %c",resultado);
            break;
        case '*' :
            resultado= x*y;
            printf ("Resultado: %c",resultado);
            break;
        case '/' :
            resultado=x/y;
            printf ("Resultado: %c", resultado);
            break;
    default:
            printf ("Invalido");
    }

}

Erro.png

  • Curtir 1
Postado

O erro esta relacionado a função scanf. Após cada entrada o usuário tecla ENTER para confirma esse ENTER '\n' não é ignorado pelo comando  scanf ("%c",& z);, pelo contrário &z captura o caractere '\n' ENTER ou NOVA LINHA e depois testa resultando na mensagem de invalido.

  • Curtir 1
Postado

@Vinicius Zancanari    seu código está certo,  mas quando você está pegando dados inteiro do teclado e em seguida vai pegar caracteres então existe lixo no buffer do teclado e precisa limpar o buffer antes de fazer a leitura, e para isso você pode usar esse  comando  :

fflush(stdin); 

assim a leitura sairá certa,   e  nos case na hora de imprimir você colocou   " %c "   para imprimir inteiro e o certo seria   " %d "  ,   então seu código com algumas modificações ficaria assim :

#include<stdio.h>
#include <conio.h>
int main ()
{
    int x,y,resultado;
    char z;
    printf ("Maior valor: ");
    scanf ("%d",& x);
    printf ("Menor valor: ");
    scanf ("%d",& y);
    printf ("Indique a operacao:\n  + adicao\n  - subtracao\n  * multiplicacao\n  / divisao /\n ");
    fflush(stdin);
    scanf("%c",&z);
    switch ( z )
    {
        case '+' :
            resultado = x+y;
            printf ("Resultado: %d",resultado);
            break;
        case '-' :
            resultado= x-y;
            printf ("Resultado: %d",resultado);
            break;
        case '*' :
            resultado= x*y;
            printf ("Resultado: %d",resultado);
            break;
        case '/' :
            resultado=x/y;
            printf ("Resultado: %d", resultado);
            break;
    default:
            printf ("Invalido");
    }

}

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!