FLTK - 在if语句中使用输入值(const char *)

时间:2016-01-19 03:42:27

标签: c++ fltk

相当新的编程,目前正在使用FLTK做一个项目,我希望有一个Fl_Int_Input,并使用它来创建一个if语句,这取决于人们键入的内容,类似于:

if(input->value()=='1'){do this;}

if(input->value()=='2'){do this;}

else{do this;}

但是,当我使用' value'时,在线查看似乎是在if语句中使用char值的方法,会发生错误:ISO C ++禁止在指针和整数之间进行比较

我认为这是因为值是一个const char *而不是char。我使用

时会运行代码
if(input->value()=="1"){do this;}

但即使我输入1也没有发生

我应该如何使用此输入创建if语句?

就像我说的那样,我对这一切都很陌生,所以我不知道您可能需要提供哪些其他相关信息,我会尝试提供您可能需要的任何信息,这些是我的:

#include <iostream>
#include <sstream>
#include <string>

#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Box.H>
#include <FL/Fl_Button.H>
#include <FL/Fl_Check_Button.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Output.H>
#include <FL/Fl_Input.H>
#include <FL/Fl_Int_Input.H>
#include <FL/Fl_Timer.H>

在这里输入代码,我注意到的一件事是&#39; 1&#39;变成红色,这在我的代码中没有出现,也许这是相关的?

2 个答案:

答案 0 :(得分:1)

您需要了解C中的字符串是如何工作的。 if(input->value()=="1")对您不起作用的原因是因为==值上的char*运算符执行指针比较,而不是字符串比较。

FL_Input::value()返回指向为字符串分配的内存的指针,但这与字符串文字"1"的内存位置不同,后者存储在程序内存的某处段。

要进行C风格的字符串比较,您可以这样做:

if( 0 == strcmp( input->value(), "1" ) )

当您加入strcmp时,<cstring>功能可用。

另一种方法(但不是很好)是将该值复制到临时std::string对象中并使用其重载的operator==( const char *)

if( std::string( input->value() ) == "1" )

要使用std::string,请添加<string>

更多阅读:

答案 1 :(得分:0)

另一种方法是将值保存在变量中,然后使用if语句中的变量。

std::string input_value;
input_data = input -> value();
if (input_data =="1") //should be in a callback or some function 
{ do this ...}
else if (input_data == "0")
{ do this ...}
else
{ do this ...}

希望我能理解并回答你的问题