為什么我的c!='o'|| c!='x'條件總是如此?我有這個循環語句,我將使用類似C的語法表達(C,C ++,Java,JavaScript,PHP等都使用類似的語法):while (c != 'o' || c != 'x') {
c = getANewValue();}我想讓它一直運行,直到我得到一個'o'或'x',但它永遠不會退出,即使c是'o'或'x'。為什么不?我也嘗試過使用if:if (c != 'o' || c != 'x') {
// Show an error saying it must be either 'o' or 'x'}但這也總是顯示錯誤信息,即使c是'o'或'x'。為什么?
3 回答

白板的微信
TA貢獻1883條經驗 獲得超3個贊
這種情況(c != 'o' || c != 'x')
永遠不會是假的。如果c
是'o'
,則為c != 'x'
真,并滿足OR條件。如果c
是'x'
,則為c != 'o'
真,并滿足OR條件。
你想要&&
(AND),而不是||
(OR):
while (c != 'o' && c != 'x') { // ...}
“雖然c
不是'o'
和c
不是''x'......”(例如,它們都不是)。
或者使用De Morgan的法律,包括:
while (!(c == 'o' || c == 'x')) { // ...}
“雖然這是不正確的(c
是'o'
或c
為'x'
)......”

紫衣仙女
TA貢獻1839條經驗 獲得超15個贊
為什么我的
c != 'o' || c != 'x'
病情總是如此?
該表達式使用邏輯OR
運算符(||
)組合了兩個子表達式。表達式true
是否至少有一個子表達式true
。為了成為false
它,它連接的兩個子表達式必須是false
。
子表達式是c != 'o'
和c != 'x'
。
第一子表達c != 'o'
是false
時c == 'o'
。第二個相同; 它是false
什么時候c == 'x'
。
請注意,他們不能false
在同一時間,因為c
不能'o'
與'x'
在同一時間。
添加回答
舉報
0/150
提交
取消