Hej mam prośbę mógłby mi ktoś pomóc, bo chciałem żeby program sprawdzał czy dobrze wprowadziłem dane i ewentualnie wyrzucał błąd ale coś mi nie idzie to... np gdy wprawdzam 1+d3 - to wyskakuje błąd, program nie pyta o drugą liczbę, liczy podając wyniki z tego dodawania. np gdy podam mu 1+3i to wyświetla że dobrze wprowdziłem, nie pyta o drugą liczbę, liczy, podając wyniki z tego dodawania.
Oto kod:
#include <iostream>
#include <cmath>
using namespace std;
// klasa
class zespolona
{
public:
double re; //czesc rzeczywista
double im; //czesc urojona
zespolona(double re=0,double im=0):re(re),im(im) {}
zespolona operator+(const zespolona &z)const; // dzialania na liczbach
zespolona operator-(const zespolona &z)const;
zespolona operator*(const zespolona &z)const;
zespolona operator/(const zespolona &z)const;
bool operator==(const zespolona &z)const { return re==z.re && im==z.im; }
zespolona sprz()const { return zespolona(re,-im); }
double modul()const;
};
const zespolona i(0,1); //jednosc urojona
// przciazenia operatorow
ostream &operator<<(ostream &s,const zespolona &z)
{
if(z.im) return s<<'('<<z.re<<"-+"[z.im>0]<<'i'<<abs(z.im)<<')';
return s<<z.re;
}
istream &operator>>(istream &s,zespolona &z)
{
char S;
s>>z.re>>noskipws>>S;
if(s)
{
if(S!='+'&&S!='-') s.unget();
else
{
char i;
s>>i;
if(i!='i') s.unget();
else
{
s>>z.im;
if(S=='-') z.im=-z.im;
}
}
}
return s>>skipws;
}
istream &nomore(istream &s)
{
bool ok=true;
char ch;
while((ch=s.get())!='\n') ok&=((ch==' ')||(ch=='\t'));
s.unget();
if(!ok) s.clear(ios::badbit);
return s;
}
// dodawanie
zespolona zespolona::operator+(const zespolona &z)const
{
return zespolona(re+z.re,im+z.im);
}
// odejmowanie
zespolona zespolona::operator-(const zespolona &z)const
{
return zespolona(re-z.re,im-z.im);
}
// mnozenie
zespolona zespolona::operator*(const zespolona &z)const
{
return zespolona(re*z.re-im*z.im,re*z.im+im*z.re);
}
// dzielenie
zespolona zespolona::operator/(const zespolona &z)const
{
double div=z.re*z.re+z.im*z.im;
return zespolona((re*z.re+im*z.im)/div,(im*z.re-re*z.im)/div);
}
// modul
double zespolona::modul()const
{
return sqrt(re*re+im*im);
}
int main()
{
zespolona a,b;
// wprowadzamy liczby
cout<<"Podaj pierwsza liczbe zespolona (np 1+i3): ";
cin>>a;
cout<<"Podaj druga liczbe zespolona (np 2-i1): ";
cin>>b;
// sprawdzamy czy dobrze wprowadzilismy
if(cin) cout<<"dobrze wprowadzono"<<endl;
else
{
cin.clear();
while(cin.get()!='\n') {}
cout<<"Blad wprowadzenia"<<endl;
}
//obliczenia
cout<<"suma: "<<a<<'+'<<b<<'='<<(a+b)<<endl;
cout<<"roznica: "<<a<<'-'<<b<<'='<<(a-b)<<endl;
cout<<"iloczyn: "<<a<<'*'<<b<<'='<<(a)*(b)<<endl;
cout<<"iloraz: "<<a<<'/'<<b<<'='<<(a)/(b)<<endl;
while(cin.get()!='\n'){}
cin.get();
return 0;
}