2016-01-19 35 views
1

对于编程来说相当新颖,目前正在使用FLTK做一个项目,并且我想要一个Fl_Int_Input,并用它来创建一个if语句,这取决于该人类型,沿着线的东西:FLTK - 在if语句中使用输入值(const char *)

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

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

else{do this;} 

然而,当我使用“价值”,这在网上看似乎是在if语句中使用字符值的方式,出现错误: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> 

在这里键入代码,我注意到的一件事是'1'变成红色,这在我的代码中不会出现,也许这是相关的?

+0

从这里开始:[权威的C++书指南和列表](http://stackoverflow.com/q/388242/1889329)。 – IInspectable

回答

0

您需要了解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>

更多阅读:

+0

感谢您的快速回复!仍然让我的头在指针附近,所以这真的很有用:) – aleco34

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 ...} 

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