在FLTK

时间:2017-04-04 18:18:39

标签: c++ fltk

过去几天我一直在学习FLTK,但今天我来到了难以接受的地步。

这是程序应该如何工作的。有两个按钮:but1but2.每个按钮旁边都有一个输入小部件。底部还有一个输出小部件。 按下按钮会将相应的输入发送到输出字段,并将其添加到当前显示的值。

我无法弄清楚如何添加两个小部件的值,因为显然它们存储为字符串。我想出了一个想法,通过首先将输入值转换为int,然后将其添加到名为“sum”的变量(其值最初为0),将其转换回字符串({{1} })然后才将其分配给输出作为其值。但是,它显然会使功能超载。我不知道我做错了什么,因为把ssum放在那里工作正常。

我该怎么做?有没有更好的方法将存储在别处的值分配给窗口小部件?或者可能有一种直接的方法来添加小部件的值?

以下是整个代码:

inp->value()

1 个答案:

答案 0 :(得分:0)

你必须将字符串从输入转换为整数才能添加它们,然后你需要将结果转换回字符串以显示它。但是,您的代码在应该将sum转换为字符串的部分失败。

C样式字符串是以0分隔的字符数组。在C ++中,您通常应该使用更安全的类std::string。在您的代码中ssum 任何类型的字符串。它是char - 它是单个字符,例如'a''X'等等,它由8位整数值表示。要将int转换为string,您可以在C ++ 11中使用std::to_string函数,在旧版本中使用std::stringstream

C ++ 11解决方案

void cb_send(Fl_Widget* w, void *v)
{
    if (((Fl_Button*)w)->value() == 0)
    {
        w->hide();
        Fl_Input* inp = (Fl_Input*)v;
        sum = sum + atoi(inp->value());
        out->value(std::to_string(sum).c_str());
    }
}

预C ++ 11解决方案

#include <sstream>

...

void cb_send(Fl_Widget* w, void *v)
{
    if (((Fl_Button*)w)->value() == 0)
    {
        w->hide();
        Fl_Input* inp = (Fl_Input*)v;
        sum = sum + atoi(inp->value());

        std::stringstream ss;
        ss << sum;
        out->value(ss.str().c_str());
    }
}