2012-04-30 115 views
1

我想知道是否有写布尔逻辑问题

if (test != 'e' || test != 'd') 

我想把它写这样

if (test != ('e' || 'd')) 

或者这样的事情,所以我不必重复“更短的方式test!=“

谢谢

+7

有编写短得多的方式:'如果(真)'。不过,你可能想看看*摩根法则*。如果你想知道,如果测试是'D',它不会是'e',如果它是'e',它不会是'D'。因此你的状况永远是真的。您可能需要'&&',而不是'||'。 – chris

回答

2

这就是语言的语法。这里没有什么可以做这件事......如果你不喜欢它的样子,你可以创建包含测试,然后只需调用该函数将布尔函数:

bool isEOrD(char test) 
{ 
    return (test != 'e' || test != 'd') 
} 

... 

if (isEOrD(test)) 

编辑:还有其他的方法来编写这段代码(请参阅这个答案的评论),但你原来的方式可能是最干净的方法。

+0

拍!感谢您回应 – JDN

+0

是啊,这仅仅是不值得的麻烦对于这样的小问题,只有与简化的事情。我只检查'e'或'd'一次,所以这可能会过于复杂,但我可以看到如果我多次使用它,这将会是多么有用。 – JDN

+0

这是C++,当然可以做任何你想做的事情。 Boost有点含糊地将这几个元素添加到容器中。 –

1

可以使用旧的C函数strchr

if (!strchr("de", test)) 
{ 
    // test is not 'd' or 'e' 
} 

但我不知道是否是任何更好看…我个人可能只有两个!=

+2

nno downvote,但这只是令人困惑,不要这样做 –

+0

@MooingDu ck:我同意......但我已经在几个地方看到了它,尽管在C项目中更多,而不是C++项目。 – dreamlax

+0

的事情和strchr不坏,如果你有43点不同的选择,但对于2,这是不必要的间接性。 – dave

0

C或C++必须评估你的语言的语法编写的表达式。表达式('e'或'd')总是返回true,因为'or-ing'是通过比较永远不会相同的值的位来完成的。编译器如何知道你想要什么,因为在C/C++中,原始字符只是一个整数的解释。这就是为什么你可以合法地写:

char aChar = 'a'; 
// or 
char aChar = 0x41; // hex 41 = ascii 'a' 

并让他们都工作。