Kalkulator pobierający działanie - jak skrócić/ulepszyć kod?

0

Hej.
Mam taki oto kod:

#include <iostream>
#include <cmath>

int main()
  {
      float a, b;
      char c;
      bool koniec;
    std::cout<< "\t\t\t\tKalkulator" << std::endl;
    do {
    std::cout<< "Wprowadz dzialanie: (wpisz 1!1 aby zobaczyc pomoc): ";
    std::cin >> a>>c>>b;
    if (c=='+')
    {std::cout << a <<" "<< c << " "<<b<< " = "<< a+b<<std::endl;}
    else if (c=='-')
    {std::cout << a <<" "<< c << " "<<b<< " = "<< a-b<<std::endl;}
    else if (c=='*')
    {std::cout << a <<" "<< c << " "<<b<< " = "<< a*b<<std::endl;}
    else if (c=='/')
    {std::cout << a <<" "<< c << " "<<b<< " = "<< a/b<<std::endl;}
    else if (c=='^')
    {std::cout << a <<" "<< c << " "<<b<< " = "<< pow(a,b)<<std::endl;}
    else if (c=='&')
    {std::cout << a <<" "<< c << " "<<b<< " = "<< pow( a,( 1 / b ) )<<std::endl;}
    else if (c=='!')
    {std::cout<<"==============\nLegenda:\n+ dodawanie\n- odejmowanie\n* mnozenie\n/ dzielenie\n^ potegowanie\n& pierwiastkowanie\n==============" <<std::endl;}
    else
    {koniec=1;}
    if (std::cin.fail()==true)
    {koniec=1;}
    } while (koniec!=1);
    return 0;
  }

Można to jakoś skrócić/ ulepszyć? Jak? Mile widziane kody :D

1
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
  {
   static const struct { const char *name;  double (*fun)(double,double); } tb[]=
     {
        { "+\tDodawanie", [](double a,double b) { return a+b; } },
        { "-\tOdejmowanie", [](double a,double b) { return a-b; } },
        { "*\tMnozenie", [](double a,double b) { return a*b; } },
        { "/\tDzielenie", [](double a,double b) { return a/b; } },
        { "^\tPotegowanie", &pow },
        { "&\tPierwiastkowanie", [](double a,double b) { return pow(a,1/b); } },
     };
    for(char ch;;)
      {
       cout<< "Wprowadz dzialanie (!-koniec): ";
       double a,b;
       if(cin>>a>>ch>>b)
         {
          for(size_t i=0;i<sizeof(tb)/sizeof(*tb);++i)
            {
             if(tb[i].name[0]==ch)
               {
                cout<<a<<' '<<ch<<' '<<b<<" = "<<tb[i].fun(a,b)<<endl;
                ch=0;
                break;
               }
            }
          if(ch) cout<<"Niepoprawna operacja, ?-pomoc"<<endl;
         }
       else
         {
          cin.clear();
          if((ch=cin.get())=='!') return 0;
          if(ch=='?')
            {
             cout<<"! -\tKoniec programu"<<endl<<"\t-- dozwolone operacje --"<<endl;
             for(size_t i=0;i<sizeof(tb)/sizeof(*tb);++i) cout<<'\t'<<tb[i].name<<endl;
            }
          else cout<<"Niepoprawne wprowadzenie, ?-pomoc"<<endl;
         }
       while(cin.get()!='\n') {}
       cout<<endl;
      }    
   }

1 użytkowników online, w tym zalogowanych: 0, gości: 1