2014-02-12 47 views
1

我有這while循環總是結束,如果其中一個情況是真的,而不是隻有結束,如果兩者都是真的。有沒有人有任何線索爲什麼?while循環與&&結束,如果其中任一個爲真,而不是如果兩者都爲真

while (f != NULL && t!= NULL) 
{ 
    if (f == NULL && t!= NULL) 
    { 
     cout << t->start_byte << " - "<< left<< setw(20) << t-> end_byte << t->id << endl; 
     t=t->next; 
    } 
    else if (t == NULL && f != NULL) 
    { 
     cout << f->start_byte << " - "<< left<< setw(21) << f-> end_byte << "FREE" << endl; 
     f=f->next; 
    } 
    else 
    { 
     cout << f->start_byte << " - "<< left<< setw(21) << f-> end_byte << "FREE" << endl; 
     cout << t->start_byte << " - "<< left<< setw(21) << t-> end_byte << t->id << endl; 
     cout<< " IM IN THE BOTH " << endl; 
     t=t->next; 
     f=f->next; 
    } 
} 

的輸出如下,請記住,在這個特殊的例子循環應該有一個更自由的輸出在底部,因爲我的F鏈接列表中有3個節點,和我的T鏈表有2

Memory Block Job 

0 - 99     FREE 
100 - 129     3 
IM IN THE BOTH 
130 - 149     FREE 
150 - 179     2 
IM IN THE BOTH 
+0

_「而不是隻在兩者都爲真時才結束」_你的意思是_if條件是false_? – Michael

回答

7
while (f != NULL && t!= NULL) 

將評估真實的,只有當兩個ft都是非NULL。

從循環內部的代碼判斷,您希望它在任一變量爲非NULL時運行。你需要用邏輯或||代替:

while (f != NULL || t!= NULL) 
+0

我這樣一個愚蠢的錯誤,非常感謝!我不確定爲什麼我不這樣想。我堅持認爲會發生相反的情況,甚至沒有想過嘗試其他的選擇。 – Shane1022

3

當你有boolean1 && boolean2,這裏有可能出現的情況:

boolean1 | boolean2 | result 
---------+----------------+------- 
    true |  true  | true 
    true |  false  | false 
    false | doesn't matter | false 

boolean1false,由於short circuit evaluationboolean2不會甚至達到了,因爲無論如何,結果是false。因此,在這種情況下,如果雙方都是true,環路條件將得到滿足只有

你可能想使用||而不是&&

while(f != NULL || t!= NULL) 

而現在的條件將得到滿足,如果只有兩個一個是true

+0

「真」/「虛」案件不在您的表格中。 – fredoverflow

+0

@FredOverflow沒錯。我會添加它:) – Maroun

2

只要這兩個條件都爲真,該循環就會運行,並在其中一個條件爲假時立即結束。

如果你想它,只要其中一人是真正的運行,並儘快結束,因爲他們兩個都是假的,那麼:

更改&&||