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

FLTK - Using Input values in an if statement (const char*)

对编程相当陌生,目前正在使用 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++ forbids comparison between pointer and integer

我认为这是因为该值是 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”变成了红色,这在我的代码中没有出现,也许这是相关的?

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

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

要进行 C-style 字符串比较,您可以这样做:

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

当您包含 <cstring> 时,strcmp 函数可用。

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

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

要使用 std::string,请包含 <string>

更多阅读:

另一种方法是将值保存在变量中,然后在 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 ...}

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