Russian Qt Forum

Qt => Вопросы новичков => Тема начата: lavrik от Июль 29, 2013, 12:40



Название: По книге написал калькулятор, но он не работает. Помогите найти ошибку...
Отправлено: lavrik от Июль 29, 2013, 12:40
Уже несколько дней бьюсь над ней...  Может вы ткнете мордой в ошибку?

Программа тупо постоянно выдает нули, вместо того чтобы считать числа...

Проект во вложении..


Название: Re: По книге написал калькулятор, но он не работает. Помогите найти ошибку...
Отправлено: gil9red от Июль 29, 2013, 12:51
Метод calculate() не вызывается :)

Добавьте в метод отладочное сообщение, например
Код:
qDebug() << "do calc!";
И не забудьте про
Код:
#include<QDebug>

А еще просмотрите содержимое ваше стека, в котором вы храните числа и операнды ) и удивитесь ;)
Код:
void Calculator::slotButtonClicked()
{
    QString str = ((QPushButton*)sender())->text();

    qDebug() << m_stk;
...
}


Название: Re: По книге написал калькулятор, но он не работает. Помогите найти ошибку...
Отправлено: lavrik от Июль 29, 2013, 13:02
calculate()  вызывается....

а вот почему втек вектором отображается даже не знаю пока....


Название: Re: По книге написал калькулятор, но он не работает. Помогите найти ошибку...
Отправлено: Bepec от Июль 29, 2013, 13:34
Потому что криво :D

Видимо вы не дочитали учебник, или же там специально приведена ошибка :)

У вас операнды не добавляются в очередь. А добавляется 0, который операндом быть не может, поэтому calculate у вас выбрасывает 0 по умолчанию.

PS проблема в  if'е последнем. И да, сомнительно что это по учебнику.


Название: Re: По книге написал калькулятор, но он не работает. Помогите найти ошибку...
Отправлено: lavrik от Июль 29, 2013, 14:06
Книга Макса Шлее...  страница 119...   Если не верите, могу отскринить)))....

но это все фихня...
Я вот как накидал:

Код:
void Calculator::slotButtonClicked()
{
    QString str = ((QPushButton*)sender())->text();

    ////////  Кнопка отчистить
    if (str == "CE") {
        m_stk.clear();
        m_strDisplay = "";
        m_plcd->display("0");
        return;
    }

    //////// Точка для дробной части
    if (str == ".") {
        m_strDisplay += str;
        m_plcd->display(m_strDisplay);
        return;
    }

    //////// Число
    if (str.contains(QRegExp("[0-9]"))) {
        m_strDisplay += str;
        m_plcd->display(m_strDisplay);
        return;
    }

    //  Равно, вычисляю выражение
    if (str == "=") {
        m_stk.push(QString().setNum(m_plcd->value()));
        calculate();
        return;
    }



    //  Операция (сложение, вычитание и т.д.)
    if (str == "/" || str == "*" || str == "+" || str == "-") {
       m_stk.push(str);
       calculate();
       return;
    }

}
правда пока не работает...

Я хоть в правильно направлении думаю????


Название: Re: По книге написал калькулятор, но он не работает. Помогите найти ошибку...
Отправлено: Bepec от Июль 29, 2013, 14:15
Ну если не прибедняться, то внимательнее посмотрите пример - вы где то порядок строк напутали или же переписали :D Шлее обычно фигню не пишет (надеюсь вы сначала прочитали главу и только потом начали писать пример :D ).



Название: Re: По книге написал калькулятор, но он не работает. Помогите найти ошибку...
Отправлено: panAlexey от Июль 30, 2013, 14:06
Программа тупо постоянно выдает нули, вместо того чтобы считать числа...
почему не пользуетесь отладкой?
быстро читать мануал!