2012-04-30 116 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' 

並讓他們都工作。