c ++带有额外条件的语句

问题描述 投票:0回答:2

我想知道如何在这个if声明中添加一个额外的名字。我尝试了很多东西,但它们似乎没有用。这是我目前的代码:

string name = reinterpret_cast<const char*>(this->Playerptr + 32);//

if (this->beginWith("/maxstatsz") && this->GetAdmin() >= 8 && !name.compare("jack")) {// 
    this->forward = false; // 
    this->Buff(46, (30 * 60), 1000);// 
    this->Buff(47, (30 * 60), 1000);//
    this->Buff(48, (30 * 60), 1000);
    this->Buff(49, (30 * 60), 1000);
    this->Buff(12, (30 * 60), 1000);
    Server::CPlayer::Write((void*)this->Playerptr, 60, "ss", "Server", "#Enabled Buffs!");//
}

此命令现在仅适用于名为adminrights >= 8jack玩家。我测试了它,它工作正常。

但现在我想添加另一个玩家名称,它也可以使用这个命令。

当然,我在Server::CPlayer下添加了Buffs,但这不起作用:

else if (this->beginWith("/maxstatsz") && this->GetAdmin() >= 8 && !name.compare("hero")) {// 

等等

这也没有用

if (this->beginWith("/maxstatsz") && this->GetAdmin() >= 8 && !name.compare("jack") || this->beginWith("/maxstatsz") && this->GetAdmin() >= 8 && !name.compare("john")) {

我不知道我做错了什么。也许我需要使用OR而不是else if声明?

我希望有人可以帮助我。

c++ if-statement
2个回答
4
投票
if ( this->beginWith("/maxstatsz") &&
     ( this->GetAdmin() >= 8 ) &&
     ( !name.compare("jack") || !name.compare("hero") )
   )

Mats基本上评论了什么。使用多个子条件时,可以自由地添加括号。

此外,您的代码还有许多风格缺陷。我不会进入它们,但会建议去codereview.SE获得一些关于如何编写更好的C ++的反馈。

只是一个吸引我眼球的快速列表:

  • this->是不必要的。
  • reinterpret_cast<>,除非你被外部影响强迫使用它,总是代码味道。
  • 你不应该在你的来源中使用“魔法数字”(32,46,...);声明命名常量。
  • 更好的是,你不应该在this->Buff中“捅”,而是调用成员函数(resetBuffer(),或blankPlayground(),或addGold( 1000 )或其他)。
  • 如果namestd::string,你可以比较( name == "jack" || name == "hero" ),这更清楚。
  • 雷米写的关于允许名字列表的内容(以及给他的+1)。

1
投票

试试这个:

if (this->beginWith("/maxstatsz") &&
    (this->GetAdmin() >= 8) &&
    ((name =="jack") || (name == "hero"))) {//
    ...
}

或者,更像是这样的东西:

std::vector<std::string> names;
names.push_back("jack");
names.push_back("hero"); 
... 

if (this->beginWith("/maxstatsz") &&
    (this->GetAdmin() >= 8) &&
    (std::find(names.begin(), names.end(), name) != names.end())) {//
    ...
}
© www.soinside.com 2019 - 2024. All rights reserved.