否则如果字符串比较问题

Tek*_*Tek 2 c++

我有以下if语句,其中两个似乎不起作用.当我尝试将它与单个字符"y"或"n"进行比较时,我不明白为什么它有用,但当我尝试将它与另一个if语句中的两个字符进行比较时,我不明白.

我的最后一个问题是,如果有更好的清洁方式来写这个或者这是否可以接受简单的提示检查?

getline(cin,somestr);

if(somestr.empty()){
//do this
}
else if (somestr == "y" || "Y"){
//do something else
}
else if (somestr == "n" || "N"){
//do something else
}
else{}
Run Code Online (Sandbox Code Playgroud)

Jus*_*lin 9

你会这样做:

else if(somestr == "y" || somestr == "Y")
Run Code Online (Sandbox Code Playgroud)


i_a*_*orf 7

if (somestr == "y" || "Y"){
Run Code Online (Sandbox Code Playgroud)

请记住,在C++中0是错误的,其他一切都是真的.由于"Y"不是零,这是真的.所以你真正写的是:if (something || true).这总是如此.


bta*_*bta 6

不幸的是,该语言并没有为您提供一种简单的方法来检查变量与一组可能性.您必须单独执行每个测试或使用switch语句.因此,以下任一代码示例都是您问题的有效解决方案:

else if (somestr == 'y' || somestr == 'Y'){
//do something else
}
else if (somestr == 'n' || somestr == 'N'){
//do something else
}
Run Code Online (Sandbox Code Playgroud)


switch (somestr) {
    case 'y':
    case 'Y':
        // do something
        break;

    case 'n':
    case 'N':
        // do something
        break;

    default:
        break;
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以通过减少一些逻辑来清理代码(假设somestr是a char):

// Convert to uppercase first and only one comparison is needed
else if (toupper(somestr) == 'Y'){
//do something else
}
else if (toupper(somestr) == 'N'){
//do something else
}
Run Code Online (Sandbox Code Playgroud)