If字符串语句
If string statement
我有一个问题与以下代码:
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"。后者是隐式转换为bool
的char *
。因为指针不为空,所以总是转换为真。
相关文章:
- Switch 语句(字符串)一直选择默认值,除非其为零
- 有没有办法在C++将字符串与开关语句一起使用?
- 我如何将 OR 与 if 语句一起使用字符串
- PostgresSQL - SQL Ready 语句与字符串转义,防止 SQL 注入攻击
- C++ 虽然语句不适用于字符串和"or"
- 这两个C++语句连接字符串有什么区别?
- 不能在 if 语句 - c++ 中使用 void func 直接将字符串转换为大写
- 有没有办法我可以在 C++ 中使用 if 语句来说明如果一个字符串不是两个名称的 eqal,它会给出一个输出,ATM i
- 如果语句错误地读取字符串,则始终在第一个条件返回
- 当我的 if 语句在字符串中找到空格时,在无限循环中切换
- 尝试使用 indexOf 创建一个 if 语句来检查字符串是否包含字符.有一点麻烦
- 是否可以对任何语句字符串使用预准备语句?
- 为什么我的 if 语句不适用于 c++ 中的字符串?
- 是什么使这个以'+'开头的字符串添加成为有效的语句?
- scanf() 语句中"%*[^n]"的格式字符串指示什么?分配抑制器 (*) 和否定扫描集 ([^) 如何协同工作?
- 如何比较if语句中的字符串?
- C++字符串和 while 语句的问题
- 与 IF 语句C++的字符串比较?
- 使用 if 语句C++字符串变量
- QSqlQuery:在执行之前获取准备好的语句字符串