Ir ao conteúdo

Posts recomendados

Postado

Pessoal, estou com um pequeno problema em um trabalho que estou fazendo. Tenho o código que vai estar abaixo e preciso de uma ajudinha, a professora solicitou que fizesse uma calculadora que quando o usuário colocasse o  "=" o processo de calculo iria terminar. Meu problema é que já coloquei o igual em vários lugares e não consigo com que em qualquer momento que o usuário coloque o = e pressione enter a calculadora pare. vocês podem dar uma olhada nesse código ai e vê se tem alguma alguma dica para me passar. Quando vocês testarem e colocar o igual para que ele pare tem que colocar o igual duas vezes só que só pode ser uma.

#include <stdio.h>
#include <stdlib.h>
int main(){

    float num1,num2,resultado = -1;
    char oper;
    
    do{
        
        if(resultado >= 0)
        num1 = resultado;
        else 
        scanf("\n%f",&num1);
            
        scanf("\n %c",&oper);
        scanf("\n%f", &num2);
            
    switch( oper ){
    case '+':
        resultado = num1 + num2;
        printf("=\n%.2f\n",resultado);
        break;
    case '-':
        resultado = num1 - num2;
        printf("=\n%.2f\n",resultado);
        break;
    case '*':
        resultado = num1 * num2;
        printf("=\n%.2f\n",resultado);
        break;
    case '/':
        if(num2 != 0){
            resultado = num1 / num2;
            printf("=\n%f\n",resultado);
            break;}
        else
            printf("Divisao por zero. Informe outro numero.\n");
            scanf("%f",&num2);
               resultado = num1 / num2;
               printf("=\n%f\n",resultado);
            break;

    
    }while(oper != '=');
    
}

 

  • Curtir 1
Postado

Se entendi bem, você quer que quando o usuário digite = a calculadora pare. Se for isso, eu apenas modifiquei essa parte:

if(resultado >= 0)
{
    Continuar:
    printf("Deseja terminar? Aperta '>' para continuar ou '=' para encerrar.\n");
    scanf("\n %c", &oper);
    if(oper == '>')
    {
        goto Leitura;
    }
    else if(oper == '=')
    {
        printf("Processo encerrado!");
        break;
    }
    else
    {
        printf("Operador invalido!";
        goto Continuar;
    }
}
else
{
    Leitura:
    scanf("\n%f",&num1);
    scanf("\n %c",&oper);
    scanf("\n%f", &num2);
}

Caso não queira utilizar o goto, no lugar do goto Continuar você pode colocar o código dentro de um loop e no lugar do goto Leitura você pode colocar os scanf.

  • Curtir 2
  • Obrigado 1
  • Membro VIP
Postado

Olá a todos.

 

Observação inicial: não vou tratar da lógica do problema, apenas na sintaxe do C/C++ (vou apenas fazer compilar, o que é diferente de fazer funcionar correametne!).

 

 

@MarcelloSM, compilei o seu código aqui no Dev++, e deu  erro erro:

42    1    [...] [Error] expected 'while' at end of input

Ou seja, algo relacionado ao fim do while.

 

 

Para analisar, apenas reindentei o seu código, veja;

#include <stdio.h>
#include <stdlib.h>
int main() {
    float num1,num2,resultado = -1;
    char oper;

    do {
        if (resultado >= 0)
            num1 = resultado;
        else
            scanf("\n%f",&num1);
        scanf("\n %c",&oper); //obs.: essa e a linha de baixo não estão no else! caso deveriam está, use { }
        scanf("\n%f", &num2);
        switch (oper) {
            case '+':
                resultado = num1 + num2;
                printf("=\n%.2f\n",resultado);
                break;
            case '-':
                resultado = num1 - num2;
                printf("=\n%.2f\n",resultado);
                break;
            case '*':
                resultado = num1 * num2;
                printf("=\n%.2f\n",resultado);
                break;
            case '/':
                if (num2 != 0) {
                    resultado = num1 / num2;
                    printf("=\n%f\n",resultado);
                    break;}
                else
                    printf("Divisao por zero. Informe outro numero.\n");
                scanf("%f",&num2);
                resultado = num1 / num2;
                printf("=\n%f\n",resultado);
                break;
        } //<---FALTOU FECHAR O SWITCH
    } while(oper != '=');
}

Perceba que só de deixar indentado o erro apareceu.

 

Obs.: no Dev++ (e creio que a maioria das IDEs), ao clicar ao lado do "{" já "acende" o seu "}" correspondente, ou seja, se fosse olhando um a um veria também que faltou ele.

 

 

Alguns pontos:

10 horas atrás, TYSQUARE89 disse:

Faltou o default em switch...case, para finalizar digite o num1, depois igual e o num2, ai vai finalizar.

Creio que esse não seja o problema. O Default é opcional (o "else" do Switch). Como citado acima, acho que apenas faltou fechar a chave do Switch.

 

 

 

10 horas atrás, iHollyZinhO disse:

Se entendi bem, você quer que quando o usuário digite = a calculadora pare. Se for isso, eu apenas modifiquei essa parte:

Por favor, prefira tentar orientar o usuário a encontrar uma solução, ao invés de já entregar um código com sua sugestão. :)

 

obs. não tenho certeza, mas acho que o GoTo/Label esteja em desuso, ou seja, não seria considerado uma boa prática de programação. Alguns chegam a considerar como uma "gambiarra".  Mas é só uma impressão minha... vá saber. Nesse sentido, eu não recomendaria usá-los, seria melhor estruturar com o while ou do/while mesmo. Me corrijam se estiver enganado.

 

 

No aguardo.

  • Curtir 2
  • Obrigado 1

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