怪异的if语句行为

Weird if Statement Behaviour

本文关键字:语句 if      更新时间:2023-10-16

当以下代码到达cin语句时:如果我输入-1,它仍然运行在最后一个else-If部分中找到的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;

您应该使用&&而不是||:

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

这是因为在这一部分:

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

您正在使用||。因此,只要这四个由||分隔的语句中有一个为真(出于显而易见的原因,这种情况将一直存在),那么您的代码就会进入"if"之后的代码块