Ir ao conteúdo

Posts recomendados

Postado

Bom, na faculdade teve uma questão que dizia o seguinte

Q-Dados três valores A, B e C, em que A e B são números reais e C é um caractere, pede-se para 
imprimir o resultado da operação de A por B se C for um símbolo de operador aritmético; caso 
contrário deve ser impressa uma mensagem de operador não definido. Tratar erro de divisão por 
zero.

Em uma correção, cheguei nesse programa, com o auxílio do professor. Porém ainda tava dando erro. Acredito eu que seja na parte de getche. porque quando coloco para complicar na dá tempo de colocar o operador.

 

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

int main()
{
  float A, B, resultado;
  char C;

  printf("\nDigite os Operandos\n");
  scanf("%f %f", &A, &B);

  printf("\nDigite o operador:\n");
  C = getche();

  switch(C){
  case '+': resultado= A+B; break;
  case '-': resultado= A-B; break;
  case '*': resultado= A*B; break;
  case '/': if(B>0) resultado= A/B; break;
  default: printf("\nOperador inválido\n"); break;

}
  printf("O resultado da operação é:%.2lf", resultado);

  return 0;

}

Postado

Substitui C = getche(); por C = getch();

Seria bom reformular o programa.

De onde seu professor copiou essa questão ou tentou formular eu não sei. Ele quer uma calculadora?

Postado

Em especial quando está aprendendo e antes de seu programa estar pronto, mostre os valores lidos...
 

Por outro lado, scanf() não foi feita para ler valores do teclado e então aparecem problemas com o que ainda tinha para ser lido ou a rotina pegando caracteres de outras linhas ou passando reto pela leitura. Um inferno.

 

Uma maneira de fazer com que ela consuma tudo que tem na linha é usar algo como '%*c' no final da máscara de scanf(). Assim a rotina lê e despreza um caracter, que se espera que seja o '\n' o tal ENTER. O '%c' lê uma letra, mas o '*'faz com que a tal letra seja desprezada, e assim você não precisa declarar uma variável que nem vai usar... Algo assim

    scanf("%f %f%*c", &A, &B);

Uma maneira mais comprida e mais legível seria usar um loop

    int ch = 0;
    do { ch = getc(stdin); } while ((ch != '\n') && (ch!= EOF));

 

quando usar scanf() entenda que ela retorna um valor e USE isso. É melhor para você. Nem sempre o usuário digita as coisas como você esperava. Ou scanf() lê como você imaginava...

 

Assim funcionaria por exemplo

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

int main()
{
    float A, B, resultado;
    char C;

    printf("\nDigite os Operandos\n");
    int n = scanf("%f %f%*c", &A, &B);
    printf("\nLidos %d valores. Operandos: %6.2f %6.2f\n", n, A, B);
    printf("\nDigite o operador:\n");
    C = getchar();
    printf("\nOperador: '%c'\n", C);

    switch (C) {
    case '+':
        resultado = A + B;
        break;
    case '-':
        resultado = A - B;
        break;
    case '*':
        resultado = A * B;
        break;
    case '/':
        if (B > 0) resultado = A / B;
        break;
    default:
        printf("\nOperador inválido\n");
        break;
    };  // switch()
    printf("O resultado da operação é:%.2lf", resultado);
    return 0;

};  // main()

Mas  veja o que sai em meu computador

 


Digite os Operandos
1.23

















3.256

Lidos 2 valores. Operandos:   1.23   3.26

Digite o operador:
-

Operador: '-'
O resultado da operaþÒo Ú:-2.03

Porque?
 

scanf() está lendo 2 valores então se você usa essa rotina o usuário pode teclar 300 ENTER antes ou durante a entrada dos dois valores.
E veja que ao final saiu meio confuso:

 

Então mais um palpite: não use acentos. Não serve para nada. Só dá problema. E cuidado com o cara usar vírgula ou ponto nos valores float para o ponto decimal. Esse é outro inferno...

 

  • Obrigado 1
  • Amei 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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!