提问人:Swatheduru 提问时间:10/30/2022 更新时间:10/31/2022 访问量:83
C++ 如果语句为 true,为什么我不能进入 if 条件?[已结束]
C++ Why can't I get into an if condition if the statement is true? [closed]
问:
我在构造函数中创建了一个 for 循环,该循环遍历砖块的 XML 元素,并根据 Id 创建块。
我什至检查了 typeid,以防 mId 不是 char,而是 const char*。永不触发。代码如下:std::cout << "Made it in";
Brick::Brick(int rowSpacing, int columnSpacing, const char* Id, SDL_Renderer* renderer)
{
mDoc = new XMLDocument();
mDoc->LoadFile("Breakout.xml");
// Go through every "BrickType" element in the XML file
dataElement = mDoc->FirstChildElement("Level")->FirstChildElement("BrickTypes");
for (XMLElement* brickElement = dataElement->FirstChildElement("BrickType");
brickElement != NULL; brickElement = brickElement->NextSiblingElement())
{
std::cout << typeid(brickElement->FirstChildElement("Id")->GetText()).name();
std::cout << typeid(Id).name();
if (brickElement->FirstChildElement("Id")->GetText() == Id) {
std::cout << "Made it in";
mId = brickElement->FirstChildElement("Id")->GetText();
std::stringstream hp(brickElement->FirstChildElement("HitPoints")->GetText());
hp >> mHitPoints;
std::stringstream bs(brickElement->FirstChildElement("BreakScore")->GetText());
bs >> mBreakScore;
mTexture = IMG_LoadTexture(renderer, brickElement->FirstChildElement("Texture")->GetText());
}
}
mCurrentHp = mHitPoints;
mIsHit = false;
rect = { rowSpacing, columnSpacing, mBrickWidth, mBrickHeight };
}
而不是我尝试硬编码“S”中的 Id,因为其中一个砖 Id 是“S”,就像这样,但它仍然不想进入 if 条件,我不明白为什么。if (brickElement->FirstChildElement("Id")->GetText() == Id)
if (brickElement->FirstChildElement("Id")->GetText() == "S")
答:
0赞
Clifford
10/31/2022
#1
C 字符串是字符数组,而不是 C++ 中的一类数据类型(恰好是 C(.因此,您不能对它们使用比较运算符。从语义上讲,您正在比较两个指针的值,而不是两个字符串的内容。
为此,您需要进行 C 字符串比较:
if( strcmp(brickElement->FirstChildElement("Id")->GetText(),
Id) == 0 ) ...
或使用 C++ 比较:std::string
if( std::string(brickElement->FirstChildElement("Id")->GetText()) ==
std::string( Id ) ) ...
std::string 类重载运算符(和其他运算符),以便比较内容。构建一个只是为了进行比较有点重量级,但在其他情况下,无论如何,您最好优先使用 C 字符串。==
std::string
std::string
评论
const char * GetText() const
-- 您比较的是指针,而不是字符串。nullptr
NULL