If字符串语句

If string statement

本文关键字:语句 字符串 If      更新时间:2023-10-16

我有一个问题与以下代码:

int main(){
    string name;
    cout<<"Enter: ";
    cin>>name;
    if(name == "AHAH"||"AHAH"||"ADAD"||"ACAC"||"ASAS"||"AHAD"||"AHAC"||"AHAS"||"ADAH"||"ADAC"
        ||"ADAS"||"ACAH"||"ACAD"||"ACAS"||"ASAH"||"ASAD"||"ASAC"){
        cout<<"Call! Good hand!";
    }
    else if(name == "2H2H")
        cout<<"Rase";
system("pause");
};

无论我输入什么,程序输出:

Call! Good hand!

有什么问题吗?

当你有这么多变量要比较时,最好将它们保存在容器中,然后使用算法或循环进行比较:

std::set<std::string> names { "AHAH", "AHAH", "ADAD", "ACAC", 
                              "ASAS", "AHAD", "AHAC", "AHAS",
                              "ADAH", "ADAC" };
if( names.count( name ) )
     cout<<"Call! Good hand!";

或向量:

std::vector<std::string> names { "AHAH", "AHAH", "ADAD", "ACAC", 
                                 "ASAS", "AHAD", "AHAC", "AHAS",
                                 "ADAH", "ADAC" };
if( std::find( names.begin(), names.end(), name ) != names.end() ) 
    cout<<"Call! Good hand!";

问题是,无论如何你都很可能再次需要这个名称列表(当你编写一个真正的程序来做一些有用的事情时)

你需要这样写if语句:

if ( name == "AHAH" || name == "ABCD" || ...etc... )
{
    cout << "Call, good hand!";
}
else if ( name == "2H2H" )
{
    cout << "Rase";
}

当你像以前那样写if语句时,你创建了指向char的指针,因为char *不是NULL,它有一个非零的值,因此计算结果为True。

而不是:

if(name == "AHAH" || "ADAD" ...

你想要这样的:

if((name == "AHAH") || (name == "ADAD") ...

问题是

if (name == "AHAH" || "ADAD"..)

不表示如果name = "AHAH"或name = "ADAD",而是表示如果(name == "AHAH")或"ADAD"。后者是隐式转换为boolchar *。因为指针不为空,所以总是转换为真。