Kalkulator z użyciem funkcji i (odporny na błędny znak)

0

Witam chcę się dowiedzieć co muszę zmienić w poniższym programie ,żeby np. podczas wpisania litery lub ich ciągu wyświetlał komunikat o błędzie, żeby działał ,bo na razie pokazuje jakiś błąd w miejscu 1 "{" oraz if (x>zakres)?

#include <cstdlib>
#include <iostream>
#include <math.h>

using namespace std;

double dodawanie(double a ,double b)
{
return a+b;
}
double odejmowanie(double a,double b)
{
return a-b;
}
double mnozenie(double a,double b)
{
return a*b;
}
double dzielenie(double a,double b)
{
return a/b;
}
double potegowanie(double a,double b)
{
return pow(a,b);
}

int main(int argc, char *argv[]){
bool wyjscie = false;
while(!wyjscie){
{
system ("chcp 1250");
int cykl12=0;
int cykl=0;
if (cykl == 0)
{
cout<<"============================Kalkulator============================ \n";
cout<<"Podaj dzialania do wykonania \n"<<endl;
cout<<"1. Dodawanie"<<endl;
cout<<"2. Odejmowanie"<<endl;
cout<<"3. Mnozenie"<<endl;
cout<<"4. Dzielenie"<<endl;
cout<<"5. Potegowanie"<<endl;
cout<<"0. Wyjscie"<<endl;
cykl++;

bool literka;
int zakres;
zakres = 0 || 1 || 2 || 3 || 4 || 5;
if (x>zakres)
{
literka==false
else
}
if (literka=false)
{
cout<<"Blad";
else
}
int x;
cin>>x;
system("cls");
cout<<"\n";
double a,b;
cout<<"Podaj 1 liczbę";
cin>>a;
cout<<"Podaj 2 liczbę";
cin>>b;


switch(x)
{
case 1:
cout<<"Wynik dodawania a+b= \n \n"<<dodawanie(a+b);
break;

case 2:
cout<<"Wynik odejmowania a-b= \n \n"<<odejmowanie(a-b);
system("pause");
system("cls");
break;

default:
cout<<"Nie ma takiej operacji"<<endl;
break;
case 3:
cout<<"Wynik mnozenia a*b= \n \n"<<mnozenie(a*b);
system("pause");
system("cls");
break;

case 4:
float z,x;
cout<<"Wynik dzielenia a/b= \n \n"<<dzielenie(a/b);
if (a || b == 0)
cout<<"Nie dziel przez 0 \n";
else
cout<<"Wynik dzielenia a/b= "<<dzielenie(z/x)<<endl;
cout<<"\n";
system("pause");
system("cls");
break;

case 0:
wyjscie = true;
break;

case 5:
cout<<"Wynik potegowania a= \n \n";
system("pause");
system("cls");
break;
}
}
if (cykl>0)
{
if (cykl12<10)
{
cykl12++;
main()
}



}
}
}
0
int x;
if(cin>>x)
  {
   cout<<"wpisales "<<x<<endl;
  }
else
  {
   cin.clear(); // resetujemy flagi w tym ios::fail
   while(cin.get()!='\n') {} // lub cin.sync(); // opróżniamy bufor 
   cout<<"wpisales litery"<<endl;
  }
0
pk_14 napisał(a)

Witam chcę się dowiedzieć co muszę zmienić w poniższym programie

Zmienić musisz przede wszystkim estetykę by zwiększyć czytelność kodu. Następnie przed zadaniem pytania warto przeszukać jeśli nie "cały internet" to chociaż portal 4p skoro już na nim zadajesz pytanie gdyż mogłoby wystąpić już takie pytanie wcześniej niejednokrotnie (i tak w rzeczywistości jest), nawet powstał artykuł o tym. proszę pomogę nawet.

0

Zmieniłem w ten sposób ,lecz ciągle wywala mi błąd w miejscu

#include <cstdlib>
#include <iostream>
#include <math.h>

using namespace std;

double dodawanie(double a ,double b)
{ //<--tutaj pojawia się błąd i nie wiem co z nim zrobić
return a+b;
}
double odejmowanie(double a,double b)
{
return a-b;
}
double mnozenie(double a,double b)
{
return a*b;
}
double dzielenie(double a,double b)
{
return a/b;
}
double potegowanie(double a,double b)
{
return pow(a,b);
}

int main(int argc, char *argv[]){
bool wyjscie = false;
while(!wyjscie){
{
system ("chcp 1250");
int cykl12=0;
int cykl=0;
if (cykl == 0)
{
cout<<"============================Kalkulator============================ \n";
cout<<"Podaj dzialania do wykonania \n"<<endl;
cout<<"1. Dodawanie"<<endl;
cout<<"2. Odejmowanie"<<endl;
cout<<"3. Mnozenie"<<endl;
cout<<"4. Dzielenie"<<endl;
cout<<"5. Potegowanie"<<endl;
cout<<"0. Wyjscie"<<endl;
cykl++;

int x;

if(cin>>x)

{
cout<<"wpisales "<<x<<endl;
}
else
{
cin.clear(); // resetujemy flagi w tym ios::fail
while(cin.get()!='\n') {} * lub cin.sync(); * opróżniamy bufor
cout<<"wpisales litery"<<endl;
}

/*bool literka;
int zakres;
zakres = 0 || 1 || 2 || 3 || 4 || 5;
if (x>zakres)
{
literka==false
else

}
if (literka=false)
{
cout<<"Blad";
else
} */
cin>>x;
system("cls");
cout<<"\n";
double a,b;
cout<<"Podaj 1 liczbę";
cin>>a;
cout<<"Podaj 2 liczbę";
cin>>b;

switch(x)
{
         case 1:
              cout<<"Wynik dodawania a+b= \n \n"<<dodawanie(a+b);
              break;
              
         case 2:
              cout<<"Wynik odejmowania a-b= \n \n"<<odejmowanie(a-b);
              system("pause");
              system("cls");
              break;
              
              default:
                      cout<<"Nie ma takiej operacji"<<endl;
                     break;
         case 3:
              cout<<"Wynik mnozenia a*b= \n \n"<<mnozenie(a*b);
              system("pause");
              system("cls");
              break;
              
          case 4:
               float z,x;
               cout<<"Wynik dzielenia a/b= \n \n"<<dzielenie(a/b);
               if (a || b == 0)
               cout<<"Nie dziel przez 0 \n";
               else 
               cout<<"Wynik dzielenia a/b= "<<dzielenie(z/x)<<endl;
               cout<<"\n";
               system("pause");
               system("cls");
               break; 
               
          case 0:
               wyjscie = true;
               break; 
               
          case 5:
               cout<<"Wynik potegowania a= \n \n";
               system("pause");
               system("cls");
               break; 
               }     
               }
               if (cykl>0)
               {
                          if (cykl12<10)
                          {
                                        cykl12++;
                                        main()
                                        }   

}
}
}

0

Co to zakres = 0 || 1 || 2 || 3 || 4 || 5; ma wg Ciebie robić? zakres zawsze będzie równy 1.

0

Chodziło mi o to ,że zakres przyjmuje wartości od 0 do 5 ,a następnie inna zmienna sprawdza wartość zmiennej x podanej z klawiatury ,po czym wprowadzone znaki będą sprawdzane i jeżeli będą liczby od 0 do 5 to wykona się jakieś działanie ,a jeśli nie lub np. wpiszemy literę lub ich ciąg pojawia się komunikat o błędzie ,gdyż wcześniej po wpisaniu litery program się "mulił". To miałem na myśli pisząc tą linijkę. Tak w ogóle czy ona jest dobrze?

0

Najprościej wczytuj wartości jako łańcuchy a następnie parsuj na odpowiedni typ.

0

Jestem laikiem i ni zrozumiałem zbytnio ostatniej wypowiedzi.

0
std::string a, b;
std::cin >> a >> b;

//...
int a = atoi(a.c_str());
int b = atoi(b.c_str());

int c = a * b;

Poza tym:
http://www.parashift.com/c++-faq-lite/misc-technical-issues.html

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