Hej, postanowiłem się nauczyć tego QT, więc postanowiłem,że jednym z pierwszych moich projektów w Qt będzie kalkulator prosty.
No i mam już przyciski z liczbami, na górze ekran i ma się w nim wypisywać to, co klikniemy, możemy też kasować ostatnią literę. Tak więc zrobiłem już wszystko, tylko mam problem z przyciskiem "=", który ma analizować to co jest na ekranie napisane jako QString, przekształcać w normalne działanie to co jest w tym QStringu i wyświetlić na ekranie wynik tego działania.
Oto kod funkcji przycisku "=":
void Kalkulator::on_rowna_clicked()
{
int znak;
double arg = 0;
QString argument = "";
double suma = 0;
int n = 0;
while( Ekran[ n ] != '+' || Ekran[ n ] != '-' || Ekran[ n ] != '/' || Ekran[ n ] != '*' || n != Ekran.length() )
{
argument += Ekran[ n ];
n++;
}
suma = argument.toDouble();
while( n != Ekran.length() )
{
if( Ekran[ n ] == '+' )
znak = 1;
if( Ekran[ n ] == '-' )
znak = 2;
if( Ekran[ n ] == '/' )
znak = 3;
if( Ekran[ n ] == '*' )
znak = 4;
n++;
argument.clear();
while( Ekran[ n ] != '+' || Ekran[ n ] != '-' || Ekran[ n ] != '/' || Ekran[ n ] != '*' || n != Ekran.length() )
{
argument += Ekran[ n ];
n++;
}
arg = argument.toDouble();
switch( znak )
{
case 1:
suma += arg;
break;
case 2:
suma -= arg;
break;
case 3:
suma /= arg;
break;
case 4:
suma *= arg;
break;
}
}
QString sumaS = QString::number( suma );
ui->ekran->setText( sumaS );
}
Ekran[] to jest QString, w którym zawarty jest tekst z ekranu, np. "123.4+256-12"
Funkcja powinna po prostu analizować tekst z QStringu "Ekran", czyli najpierw while'm szuka pierwszego argumentu, aż natrafi na znak jakiejś operacji, zapisuje go sobie, i potem znów szuka kolejnych znaków aż do kolejnego znaku operacji, lub końca tekstu. I ten pierwszy arg. zapisuje do "suma" a drugi do "arg", i po znalezieniu 2 argumentów, czyli "sumy" oraz "arg", wykonuje operację którą zapisał w trakcie.
Tak, wiem, że nie mam zrobionej hierarchii znaków, że najpierw mnożenie potem dodawanie, ale póki co chciałem żeby w ogóle działało chociaż to co jest i urczę nie udaje się :/
Kompilator nie wyświetla żadnych błędów, natomiast gdy uruchomię kalkulator to apka zawiesza się na kliknięciu "=", także coś musiałem pokręcić z pętlą while, że jest nieskończona, ale próbowałem kombinować z tym i cały czas ten sam błąd:
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Może się mylę z tym co w/w, albo nie widzę jakiegoś logicznego błędu, w każdym razie proszę o pomoc :P