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 ...}
希望我理解并回答了你的问题
对编程相当陌生,目前正在使用 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 ...}
希望我理解并回答了你的问题