【问题标题】:Weird if Statement Behaviour [closed]奇怪的 if 语句行为
【发布时间】:2016-01-13 04:18:00
【问题描述】:

当以下代码出现在 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;

【问题讨论】:

    标签: c++ if-statement int cin


    【解决方案1】:

    您应该使用&amp;&amp; 而不是||

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

    【讨论】:

      【解决方案2】:

      因为在这部分:

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

      您正在使用 ||。因此,只要由 || 分隔的四个语句之一为真(出于显而易见的原因,情况总是如此),那么您的代码将进入“if”之后的代码块

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多