2016-01-13 82 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'