Ir ao conteúdo
  • Cadastre-se

Ajuda em C++ calculadora


Gabrieldsc

Posts recomendados

Olá pessoal, estou estudando c++ há algumas semanas, e comecei a fazer vários programas simples, e agora estou fazendo uma calculadora, aliás, ela já está pronta, (código abaixo), porém quero fazer algumas melhorias e não sei como fazer, são duas coisas que quero, e preciso de ajuda, primeiro eu quero colocar a tecla ESC, como um escape, qualquer hora que eu apertar ESC, feche a execução da janela.

O outro problema é que eu fiz um loop, e toda hora fica pedindo os operadores e o próximo numero, junto com o numero já somado, até ai beleza, porém se eu quiser zerar o numero do calculo anterior, como faço? Não sei se expliquei bem, não quero voltar todo o programa do inicio com o while, por exemplo, e sim apertar alguma tecla que zere os meus cálculos. e apagar o ultimo numero calculado.

 

Se tiverem algumas dicas para mudar no código, por favor me falem, uso o visual studio

 

Segue código.

 

#include "stdafx.h"
#include <math.h>
#include <iostream>
#include <stdint.h>   
#include <conio.h>
using namespace System;
using namespace std;
int main()
{
int esc;
float N1=0,N2=0,NF,c,prox;
char OP  ;
     printf("Calculadora em C++, aperte esc a qualquer momento para fechar a calculadora\n");
     printf("\nDigite o primeiro numero\n");
     fflush(stdin);
     scanf("%f", &N1);
     printf("escolha o operador + - / * %%  \n\n");
     scanf("%s",&OP);
     fflush(stdin);
     printf("\nDigite o segundo numero\n\n");
     fflush(stdin);
     scanf("%f", &N2);
     system("cls");
 
switch (OP)
{
case '+':
 
NF=N1+N2;
cout <<N1<<"+"<<N2<<"="<<NF<<"\n\n";
break;
 
case '-':
NF=N1-N2;
cout <<N1<<"-"<<N2<<"="<<NF<<"\n\n";
break;
 
case '*':
NF=N1*N2;
cout <<N1<<"*"<<N2<<"="<<NF<<"\n\n";
break;
 
case '/':
NF=N1/N2;
cout<<N1<<"/"<<N2<<"="<<NF<<"\n\n";
break; 
 
case '%':
NF=N1*N2/100;
cout<<N1<<"*"<<N2<<"/100\n\n "<<NF<<"\n\n";
break;
 
default:
cout <<"\aOperador invalido!\n\n";system ("pause");return 0;}
system("cls");
 
float x=1;
float x1=prox;
do
 
{
cout<<NF<<"\n\n";
prox=NF;
printf("escolha o operador + - / * %%\n\n");
scanf("%s",&OP);
fflush(stdin);
 
printf("\nDigite o proximo numero\n");
fflush(stdin);
scanf("%f", &N1);
 
system("cls");
switch (OP)
{
case '+':
 
NF=N1+prox;
cout <<prox<<"+"<<N1<<"="<<NF<<"\n\n";
break;
 
case '-':
NF=prox-N1;
cout <<prox<<"-"<<N1<<"="<<NF<<"\n\n";
break;
 
case '*':
NF=N1*prox;
cout <<prox<<"*"<<N1<<"="<<NF<<"\n\n";
break;
 
case '/':
NF=prox/N1;
cout<<prox<<"/"<<N1<<"="<<NF<<"\n\n";
break; 
 
case '%':
NF=N1*N2/100;
cout<<N1<<"*"<<N2<<"/100\n\n "<<NF<<"\n\n";
break;
 
default:
cout <<"\aOperador invalido!\n\n";system ("pause");return 0;}
 
 
system("cls");
} while (x<=1);
 
}
Link para o comentário
Compartilhar em outros sites

Não há a necessidade de usar 'esc'. Todo aplicativo console por padrão recebe o comando 'Ctrl+C' para encerrar a aplicação. É perder tempo fazer isso. Mas se quiser usar o 'esc' pesquise o valor dele a tabela ASCII (verá que o valor é 27), basta implementálo no switch-case.

switch(&caractere) //Escolha{     //Outros casos...     //...     case 27: //Caso for 'esc' (27 na tabela ASCII)          return 0; //Encerra o programa com sucesso}

E você pode zerar o valor inicial, implementando uma nova opção no switch-case. Imprimindo por exemplo: "Precione 'z' para zerar a calculadora".

switch(&caractere) //Escolha{     //Outros casos...     //...     case '\': //Caso for 'esc' (27 na tabela ASCII)          NF = 0;          break;}

Qualquer dúvida dê um toque.

Link para o comentário
Compartilhar em outros sites

Não sabia a respeito do ctrl+c, porém tentei colocar o esc e não consegui, porque eu quero que feche em qualquer hora, tipo eu escolhi  operador e aperto esc para fechar, mesmo sem completar o calculo, é possível? quanto ao de zerar, ainda não tentei, eu coloco esse Case no meio de algum switch ou crio um novo?  Obrigado.

Link para o comentário
Compartilhar em outros sites

É possível usar o 'esc' a qualquer momento, sim, mas você terá que reestruturar todo seu programa (seria melhor criar um novo código, e nem sempre isso é viável, pois as vezes não temos tempo, como numa prova). É melhor usar o Ctrl+C padrão do sistema operacional.

 

Quanto a zerar a calculadora, voce só terá que implementar os switch-case já existentes no seu aplicativo.

Adicione 'z' ou 'c', qualquer letra serve, como se fosse um operador. As calculadoras sempre usam zerar como um operador, é por isso que existe o botão 'C' nelas. Esse 'C' significa o operador 'clear (zerar)'. Lembre-se de explicar ao usuário do aplicativo o que a letra simboliza. Assim será só necessário tratar o caso numa switch-case já existente.

 

Espero tê-lo ajudado a entender.

Link para o comentário
Compartilhar em outros sites

Ajudou muito, e que estou começando agora a programar, então fiz uma calculadora básica, dps coloquei loop, e dps porcentagem, e fui adicionando opções, so para treinar com a linguagem c++,agora entendi como zerar, vou arrumar o código e posto aqui dps... Quanto ao esc do queria saber se era possível, mas o ctrl c já resolve mesmo, se eu fosse reestruturar seria trabalhoso fazer isso com o esc ? Obrigado novamente

Link para o comentário
Compartilhar em outros sites

Terminei, mudei algumas coisas só para facilitar ao usuário mexer,Rafael obrigado, me ajudou bastante,proximo passo é aprender Poo e tentar passar para telas esse código. segue código:

 

#include "stdafx.h"
#include <math.h>
#include <iostream>
#include <stdint.h>   
#include <conio.h>
using namespace System;
using namespace std;
int main()
{
int esc;
float N1=0,N2=0,NF,c,prox,x=1;
char OP ;
 
     printf("Calculadora em C++\n\n");
     printf("\nDigite o primeiro numero\n");
     fflush(stdin);
     scanf("%f", &N1);
     printf("\nEscolha o operador + - / * %%  \n\n");
     scanf("%s",&OP);
     fflush(stdin);
     printf("\nDigite o segundo numero\n\n");
     fflush(stdin);
     scanf("%f", &N2);
     system("cls");
 
switch (OP)
{
case '+':
 
     NF=N1+N2;
     cout <<N1<<"+"<<N2<<"="<<NF<<"\n\n";
 break;
 
 case '-':
 NF=N1-N2;
 cout <<N1<<"-"<<N2<<"="<<NF<<"\n\n";
 break;
 
 case '*':
 NF=N1*N2;
 cout <<N1<<"*"<<N2<<"="<<NF<<"\n\n";
 break;
 
 case '/':
 NF=N1/N2;
 cout<<N1<<"/"<<N2<<"="<<NF<<"\n\n";
 break; 
 
 case '%':
 NF=N1*N2/100;
 cout<<N1<<"*"<<N2<<"/100\n\n "<<NF<<"\n\n";
 break;
 
default:
cout <<"\aOperador invalido!\n\n";system ("pause");return 0;}
   system("cls");
 
 
 
do
 
{
cout<<NF<<"\n\n";
prox=NF;
printf("Escolha o operador + - / * %% c \n\n");
   scanf("%s",&OP);
   fflush(stdin);
 
 
switch (OP)
{
  case 'c':
  NF=0;
  system("cls");
  cout<<NF;
  break;
 
case '+':
  printf("\nDigite o proximo numero\n");
  fflush(stdin);
  scanf("%f", &N1);
  system("cls");
 
  NF=N1+prox;
  system("cls");
  cout <<prox<<"+"<<N1<<"="<<NF<<"\n\n";
  system("cls");
  break;
 
case '-':
printf("\nDigite o proximo numero\n");
  fflush(stdin);
  scanf("%f", &N1);
  system("cls");
 
NF=prox-N1;
cout <<prox<<"-"<<N1<<"="<<NF<<"\n\n";
system("cls");
break;
 
case '*':
printf("\nDigite o proximo numero\n");
  fflush(stdin);
  scanf("%f", &N1);
  system("cls");
 
NF=N1*prox;
cout <<prox<<"*"<<N1<<"="<<NF<<"\n\n";
system("cls");
break;
 
case '/':
printf("\nDigite o proximo numero\n");
  fflush(stdin);
  scanf("%f", &N1);
  system("cls");
 
NF=prox/N1;
cout<<prox<<"/"<<N1<<"="<<NF<<"\n\n";
system("cls");
break; 
 
case '%':
  printf("\nDigite o proximo numero\n");
  fflush(stdin);
  scanf("%f", &N1);
  system("cls");
 
NF=N1*N2/100;
cout<<N1<<"*"<<N2<<"/100\n\n "<<NF<<"\n\n";
system("cls");
   break;
 
 
default:
cout <<"\aOperador invalido!\n\n";system ("pause");return 0;
   system("cls");
 
 
}
 
} while (x<=1);
}
Link para o comentário
Compartilhar em outros sites

Gabrieldsc me tira uma duvida, iniciei essa semana meu curso youtube de c++ (kkk), to no inicio ainda e o programa indicado foi o Falcon C++, onde ao inserir esse seu codigo ele me retorna alguns erros, precisamente nessas linhas:

#include "stdafx.h"
   
#include <conio.h>

 

 

Qual o programa que você utiliza?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Olá maikon, então eu uso o visual Studio 2013, é um software da Microsoft, que a empresa que trabalho utiliza... O primeiro erro stdx você pode tirar, não sei o motivo, mas toda aplicação no visual Studio pede para incluir... Eu recomendo você usar o visual Studio ou o dev c++, esse segundo dev, é um bom programa, que eu utilizo na minha faculdade.

Link para o comentário
Compartilhar em outros sites

Olá maikon, então eu uso o visual Studio 2013, é um software da Microsoft, que a empresa que trabalho utiliza... O primeiro erro stdx você pode tirar, não sei o motivo, mas toda aplicação no visual Studio pede para incluir... Eu recomendo você usar o visual Studio ou o dev c++, esse segundo dev, é um bom programa, que eu utilizo na minha faculdade.

Valeu Gabriel, vou experimentar aqui e ver no que dá.. Final do mês começo meu curso e conforme for evoluindo vou postando no fórum.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!