2016-01-13 83 views
-1

當下面的代碼來到cin語句:如果我輸入-1,它仍然運行我的invalidSelectorError()發現最後其他如果部分...即使該部分應該通過如果mainMenuSelector等於-1。奇怪的,如果陳述行爲

爲什麼?

(順便說一句,invalidSelectorError()運行後,while循環包圍的一切工作和程序終止如預期。)

int mainMenuSelector; 

while(mainMenuSelector != -1){ 
    cout << "--- MAIN MENU -----------------" << endl; 
    cout << "[1] Create New Contact" << endl; 
    cout << "[2] View Existing Contacts" << endl; 
    cout << "[3] View or Edit Data Fields" << endl; 
    cout << "-------------------------------" << endl; 
    cout << "Or just press ENTER to quit." << endl; 
    cout << "-------------------------------" << endl; 
    cout << "Selection: "; 

    mainMenuSelector = -1; 
    cin >> mainMenuSelector; 
    cin.ignore(); 

    if(mainMenuSelector == 1){ 
     contactCreator(); 
    }else if(mainMenuSelector == 2){ 
     contactViewer(); 
    }else if(mainMenuSelector == 3){ 
     dataFieldViewer(); 
    }else if(mainMenuSelector != 1 || 
      mainMenuSelector != 2 || 
      mainMenuSelector != 3 || 
      mainMenuSelector != -1 
      ){ 
     invalidSelectorError(); 
    } 
} 
return 0; 

回答

4

您應該使用&&而不是||

if(mainMenuSelector != 1 && 
     mainMenuSelector != 2 && 
     mainMenuSelector != 3 && 
     mainMenuSelector != -1 
     ){ 
0

這是因爲在這個部分:

else if(mainMenuSelector != 1 || mainMenuSelector != 2 || mainMenuSelector != 3 || mainMenuSelector != -1 ){ invalidSelectorError();

您正在使用||。因此,只要由||分隔的那四個語句中的一個是真的(並且總是如此,出於顯而易見的原因),那麼你的代碼將在'if'之後進入代碼塊,如果'if'