FLTK - 在 if 语句中使用输入值 (const char*)
Posted
技术标签:
【中文标题】FLTK - 在 if 语句中使用输入值 (const char*)【英文标题】:FLTK - Using Input values in an if statement (const char*) 【发布时间】:2016-01-19 03:42:26 【问题描述】:相当新的编程,目前正在使用 FLTK 做一个项目,我想要一个 Fl_Int_Input,并使用它来创建一个 if 语句,该语句取决于人输入的内容,类似于:
if(input->value()=='1')do this;
if(input->value()=='2')do this;
elsedo 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”变成了红色,这在我的代码中没有出现,也许这与此有关?
【问题讨论】:
从这里开始:The Definitive C++ Book Guide and List。 【参考方案1】:您需要了解 C 中的字符串是如何工作的。 if(input->value()=="1")
对您不起作用的原因是因为 char*
值上的 ==
运算符进行指针比较,而不是字符串比较。
FL_Input::value()
返回指向为您的字符串分配的内存的指针,但这与字符串文字 "1"
的内存位置不同,后者存储在程序内存段的某个位置。
要进行 C 风格的字符串比较,您可以这样做:
if( 0 == strcmp( input->value(), "1" ) )
当您包含<cstring>
时,strcmp
函数可用。
另一种方法(但不是很好)是将该值复制到一个临时的std::string
对象中并使用其重载的operator==( const char *)
:
if( std::string( input->value() ) == "1" )
要使用std::string
,请包含<string>
。
更多阅读:
strcmp std::string【讨论】:
感谢您的快速回复!我仍然在思考指针,所以这真的很有帮助:)【参考方案2】:另一种方法是将值保存在变量中,然后在 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 - 在 if 语句中使用输入值 (const char*)的主要内容,如果未能解决你的问题,请参考以下文章