Russian Qt Forum
Октябрь 01, 2024, 16:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: По книге написал калькулятор, но он не работает. Помогите найти ошибку...  (Прочитано 3291 раз)
lavrik
Гость
« : Июль 29, 2013, 12:40 »

Уже несколько дней бьюсь над ней...  Может вы ткнете мордой в ошибку?

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

Проект во вложении..
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Июль 29, 2013, 12:51 »

Метод calculate() не вызывается Улыбающийся

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

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

    qDebug() << m_stk;
...
}
« Последнее редактирование: Июль 29, 2013, 12:56 от gil9red » Записан

lavrik
Гость
« Ответ #2 : Июль 29, 2013, 13:02 »

calculate()  вызывается....

а вот почему втек вектором отображается даже не знаю пока....
Записан
Bepec
Гость
« Ответ #3 : Июль 29, 2013, 13:34 »

Потому что криво Веселый

Видимо вы не дочитали учебник, или же там специально приведена ошибка Улыбающийся

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

PS проблема в  if'е последнем. И да, сомнительно что это по учебнику.
Записан
lavrik
Гость
« Ответ #4 : Июль 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;
    }

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

Я хоть в правильно направлении думаю?Непонимающий
Записан
Bepec
Гость
« Ответ #5 : Июль 29, 2013, 14:15 »

Ну если не прибедняться, то внимательнее посмотрите пример - вы где то порядок строк напутали или же переписали Веселый Шлее обычно фигню не пишет (надеюсь вы сначала прочитали главу и только потом начали писать пример Веселый ).

Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #6 : Июль 30, 2013, 14:06 »

Программа тупо постоянно выдает нули, вместо того чтобы считать числа...
почему не пользуетесь отладкой?
быстро читать мануал!
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.11 секунд. Запросов: 23.