Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[QT]Kalkulator i funkcja dająca wynik

Ostatnio zmodyfikowano 2017-09-25 01:13
Autor Wiadomość
FIGUS
Temat założony przez niniejszego użytkownika
[QT]Kalkulator i funkcja dająca wynik
» 2017-09-25 01:13:19
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 "=":
C/C++
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
P-165185
« 1 »
  Strona 1 z 1