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

时间:2018-01-03 07:52:14

标签: c++ if-statement

我想知道如何为此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 >= 8名为jack的玩家。我测试了它,它工作正常。

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

我在Server::CPlayer下添加了Buff下面的内容,当然,但这不起作用:

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声明?

我希望有人可以帮助我。

2 个答案:

答案 0 :(得分: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" ),这更加清晰。
  • Remy写的关于允许名字列表的内容(以及+1给他)。

答案 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())) {//
    ...
}