Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
MarcelloSM

C Colocar o '=' para finalizar processo de calculo.

Recommended Posts

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 != '=');
    
}

 

Editado por DiF
Botão CODE <>
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

  • Curtir 2
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Editado por iHollyZinhO
  • Curtir 2
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Muito obrigado pelas dicas, agora entendi e consegui finalizar. 

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×