C ++ if / else混淆

时间:2013-05-27 14:25:21

标签: c++ class if-statement

这是我的代码,它检查 numOfAcc (变量)是否小于10或等于0.然后继续使用我提供的代码(如果为true)。

void customer::add_account()
{
    int selec;
    for(int i=0; i<10; i++)
    {
        if(numOfAcc<10 || numOfAcc == 0)
        {
            cout << "\n\nTo enter new account for this customer enter 1";
            cout << "\nTo go back please enter 0" << endl;
            cin >> selec;
            switch(selec)
            {
            case 0:
                officer_func();
                break;
            case 1:
                bankAccount acc;
                acc.getAccountDetails();
                accs[numOfAcc]=acc;
                numOfAcc++;
                break;
                //b.getAccountDetails(); c.numOfAcc++; break;
            }
        }
        else
        {
            cout<<"MAXIMUM ACCOUNTS LIMIT REACHED"<<endl;
            cout << c.numOfAcc; //test code to check the value of numOfAcc which returns as ZERO
        }
    }
    getch();
}

我之前已将numOfAcc成员(属于一个类)初始化为另一个函数中的ZERO。但在运行模式下,它总是以“MAXIMUM ACCOUNTS LIMIT REACHED”结束。

我使用cout语句检查了numOfAcc成员是否为零,并返回零。 if / else statments存在问题

我的代码出了什么问题?

3 个答案:

答案 0 :(得分:1)

首先,在if (numOfAcc<10 || numOfAcc == 0)中不需要第二部分,因为如果numOfAcc为0,则它​​已经<10。

其次,如果你确定numOfAcc是0并且你的“if”语句有问题,因为你输入值为0 nomOfAcc的“else”,你可以写下以下内容:

if (numOfAcc<10 || numOfAcc == 0)
{
    ...
}
else
{
    assert(numOfAcc != 0); // assert what "should be true"
    cout << ...
}

然后运行代码的Debug构建。这两件事之一将会发生:

  • 如果断言失败:你是对的。在某些时候你输入带有numOfAcc == 0的else分支。你在问题中说的是真的。
  • 如果断言失败:你错了。你永远不会输入numOfAcc == 0的else分支。你在问题中说的是错误的。

请注意,在这两种可能的结果中,第一种结果是不可能的。

进行此测试会发生什么?

答案 1 :(得分:0)

您的代码中存在短路问题(正如@MikeSeymour所说 - 这不会导致任何问题,但在发生伤害之前需要修复)

if(numOfAcc<10 || numOfAcc == 0)

numOfAcc == 0仅在numOfAcc <10时进行评估,即仅在第一个条件为假时才评估第二个条件。否则,if - 条件为真,并且不需要评估第二个条件,因为true || false == true,所以第二个条件的评估不重要。

所以你应该有单独的检查,因为如果数字是0,它总是小于10,因此条件总是为真。

此链接可能对您有用 - http://en.wikipedia.org/wiki/Short-circuit_evaluation

在你的其他部分,你有c.numOfAcc但在支票中你使用numOfAcc。为什么这不一致?可能是您应该使用if(c.numOfAcc<10 || c.numOfAcc == 0)

答案 2 :(得分:0)

if (numOfAcc == 0)
{
}
else
{
    cout << c.numOfAcc;
}

这只能打印零,因为numOfAccc.numOfAcc是两个不同的东西。

if...else语句没有错。

您的代码还有其他问题,其他答案已解释过。