2013-06-12 43 views
0

我想寫一個函數來顯示一個列表,根據是否是VIP對象。如果我的VIP標誌是真的,我只想顯示那些儲物櫃。如果它是錯誤的,我想顯示每個儲物櫃,包括貴賓卡。這是我得到的:顯示條件有問題嗎? (列表中的對象)

void SelfStorageList::dispLockers(bool vipOnly) { 

if (vipOnly) { 

    for(LockerNode *p = head; p !=0; p = p->next) { 
     if(p->objLocker.isVip) { 

     cout << p->objLocker.lockerId << "," << p->objLocker.renterName << "," << p->objLocker.monthlyRent << "," << p->objLocker.isVip << "," << p->objLocker.isRentOverdue << "\n"; 

     return; 

     } 

     else { 

     return; 

     } 

    } 

    for(LockerNode *p = head; p !=0; p = p->next) { 

     cout << p->objLocker.lockerId << "," << p->objLocker.renterName << "," << p->objLocker.monthlyRent << "," << p->objLocker.isVip << "," << p->objLocker.isRentOverdue << "\n"; 

    } 

} 


} 

道歉爲很長的路線。我認爲它應該可行,但它似乎錯過了基於我不同的簡單測試的一些案例。任何人都可以提供建議嗎?我是否可能讓情況太簡單了?

應該指出,頭指向列表中的第一個儲物櫃,下一個是指向下一個儲物櫃的指針,因爲我相信你會猜到。

+0

它什麼時候失敗,什麼時候失敗? –

+0

它會建立並運行良好。這似乎是一個合乎邏輯的問題。比如說,對於所有VIP的多元素列表,它不會正確打印,只是打印其中的一個。 –

回答

2

由於return聲明,第一個for循環將最多打印1個元素,也就是說,如果head元素設置了isVip標誌,它將打印它。然後,它會返回。

+0

哦,那樣做。我只是回來了,因爲我想確保在打印VIP部件後,我沒有列出列表中的任何非VIP部分。如果我改變了一段時間的條件,我能否消除我的回報? –

+0

當然可以。你是編碼器,你可以做任何你喜歡的事情:) 個人而言,我會離開for循環,將兩個「for」循環合併爲一個,並使cout成爲vipOnly和.isVip的組合條件 – AlexK

+0

對不起,我的意思是,這是否合乎邏輯?用你的話來回顧我的代碼,我已經取消了for循環本身的返回,因爲它是不必要的。但基於我目前的結構,我覺得我仍然需要返回else語句中的代碼才能正常工作,但我仍然有邏輯錯誤。 –

相關問題