为什么这样做?
#include <iostream>
#include <string>
using namespace std;
int main(){
string s="a";
if((s=="cm")||(s=="in")||(s=="ft")||(s=="m"))
cout<<s+" Is an illegal value";
else
cout<<"I like "+s;
return 0;
}
然后这不是
#include <iostream>
#include <string>
using namespace std;
int main(){
string s="a";
if((s!="cm")||(s!="in")||(s!="ft")||(s!="m"))
cout<<s+" Is an illegal value";
else
cout<<"I like "+s;
return 0;
}
http://ideone.com/TXUXA 我想要的答案是“我喜欢”。
答案 0 :(得分:3)
在您的第二种情况s != "cm"
中,当然会打印第一个cout
。为了否定检查和逻辑保持不变,请这样做:
if((s!="cm")&&(s!="in")&&(s!="ft")&&(s!="m"))
cout<<"I like "+s;
else
cout<<s+" Is an illegal value";
答案 1 :(得分:3)
更具体地说,您未正确应用De Morgan's law
:http://en.wikipedia.org/wiki/De_Morgan%27s_laws。
答案 2 :(得分:1)
(s!="cm")||(s!="in")||(s!="ft")||(s!="m")
每个人都是如此,所以表达的确如此。
答案 3 :(得分:1)
为什么第二个输出“我喜欢”? 第二个示例中语句中的每个条件都是正确的,因此它进入if分支。即使只有一个是真的,它仍然会进入if分支,因为你正在使用OR。
答案 4 :(得分:1)
您正在尝试检查它是否与所有这些字符串不相等,而不是它是否与这些字符串的任何不相等。
使用和,而不是或。
答案 5 :(得分:1)
否定改变了它背后的逻辑。这里有更多的理论http://en.wikipedia.org/wiki/Negation但基本上,在第二个例子中,你想检查没有条件匹配 - 这意味着你必须拥有&amp;&amp; (和)运算符而不是|| (或)