1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Calculadora simples em C

Discussão em 'Programação' iniciada por WindWalker, 19 de Outubro de 2006. (Respostas: 15; Visualizações: 15362)

  1. WindWalker

    WindWalker Power Member

    Olá!

    Estou agora a iniciar-me em C (por causa do curso superior) e pediram-nos para fazer um programa que recebesse um input do teclado do tipo '5*6' e que fizesse a conta.


    Até agora tenho isto:

    Sugestões e correcções agradecem-se :)
     
    Última edição: 19 de Outubro de 2006
  2. jaac

    jaac Power Member

    O código está sintaticamente errado...

    Aqui parece ser o mais estranho de tudo primeiro usas o % e depois comparas directamente com o operador...
     
  3. WindWalker

    WindWalker Power Member

    Por acaso esses % já tirei (no ficheiro) :x

    De qualquer forma, post anterior editado. Espero mais sugestões. Obrigado.
     
  4. WindWalker

    WindWalker Power Member

    Em if (%c != * ) não será necessário tirar o % e por o asterisco entre plicas?

    if (c != '*')?
     
  5. jaac

    jaac Power Member

    Primeiro deves de usar '/' ou '+',etc

    Segundo em vez de usares ifs encadeados usa a disjunção de condições

     
  6. MaxDamage

    MaxDamage Power Member

    Correcto :)

    Btw, não faria mais sentido ter:
    if (c == '*')
    {
    /* instruções */
    }

    (...)
     
  7. WindWalker

    WindWalker Power Member

    Penso que dá das duas maneiras.

    Verificar se os operadores são os pretendidos (MaxDamage) e efectuar as contas; pôr no else para repetir o "input".

    Ou então por no else fazer a conta (que não estou a conseguir!!) e o que fazer em caso de erro de operador no if (parece mais complicada esta via que estou a usar :x)

    jaac vou tentar isso e depois digo algo.
     
  8. Hipnoted

    Hipnoted Power Member

    Mas para quê tantos if´s?

    Não seria melhor pôr:

     
  9. jaac

    jaac Power Member

    A maneira mais elegante seria:

     
  10. WindWalker

    WindWalker Power Member

    Está melhor

    Obrigado por todas as sugestões.

    @jaac não vou escrever dessa maneira, porque nem conheço a função(?) switch.

    O código é agora:

    Ele está a dar erro na linha 'e = a d b;', pelo que penso que não substitui d pelo caracter armazenado (o operador, * / - +).
     
  11. jaac

    jaac Power Member

    O C não te permite fazer isso que pretendes. Se não queres usar o switch-case tens que ter um if onde possas identificar a operação pretendida.

    Código:
    if ( (d == '*' ) || (d == '/' ) || (d == '+' ) || (d == '-' ) ) {
    
    e = a d b;
    
    
    }
    
    
    else {
    
    printf("Erro na introducao do simbolo da operacao!\n");
    
    while (getchar() != '\n');
    
    printf("Introduza de novo:\n");
    
    scan_res = scanf("%f %c %f",&a, &d, &b);
    
    }
    O else vai pedir um valor, mas não vai fazer nada...
     
  12. WindWalker

    WindWalker Power Member

    Mas então este if não devia conter o código a executar caso os operadores encontrados em d fossem permitidos?

    Não percebo...Devia modificar o conteúdo ( {...} ) do if que tenho?
     
  13. jaac

    jaac Power Member

    O que vai estar em d? um char.

    Qual o resultado de teres um inteiro seguido de um char com outro inteiro a seguir? nenhum porque é uma expressão sintaticamente errada.

    Imagina a frase: O joão foi para casa, é uma frase que sintaticamente está correcta. Não te interessa se ele foi para a casa dele ou se assaltou a do vizinho. O compilador é mais ou menos assim.

    Agora outra frase: O joão caderno para casa, se leres a frase não faz sentido. Era suposto teres um verbo, mas tens um subjectivo.

    Agora pelo compilador: int char int, um inteiro tudo bem, a seguir lês um char. Para o compilador a tua "frase" não faz sentido, pois ele estava a espera de um operador.
     
  14. WindWalker

    WindWalker Power Member

    OK. Obrigado por todas as respostas.

    Vou estudar melhor isto e trabalhar o ficheiro no fim de semana. Depois digo se consegui :P
     
  15. HecKel

    HecKel The WORM

    Segue a sugestão que já te deram do case. É a mais adequada, a de melhor extensibilidade e a mais limpa.

    Dentro de cada caso fazes as contas, pois não vais conseguir passar o caracter que representa o operador para um operador sintáctico da linguagem C.

    Agora menos confuso:

    Código:
    (blablabla)
    case '*':
              resultado=a*b;
              break;
    case '+':
              resultado=a+b;
              break;
    (blablabla)
    abraços, HecKel
     
  16. FELiYCORA

    FELiYCORA 1st Folding then Sex

    ya é assim mesmo, mas se não queres usar o switch, tens k fazer tipo:

    if (d == '*')
    e = a*b;
    if (d == '+')
    e = a+b;
    ...

    etc

    eu tive k fazer uma mas as multiplicações e divisões tinham que ser feitas através de somas e subtracções... ah pois!
     

Partilhar esta Página