C++ if/else confusion

C++ if/else confusion

本文关键字:confusion else if C++      更新时间:2023-10-16

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

void customer::add_account()
{
    int selec;
    for(int i=0; i<10; i++)
    {
        if(numOfAcc<10 || numOfAcc == 0)
        {
            cout << "nnTo 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。但在运行模式下,它总是以else语句"MAXIMUM ACCOUNTS LIMIT REACHED"结束。

我用cout语句检查了numOfAcc成员是否为零,它返回为零。if/else语句有问题

我的代码出了什么问题?

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

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

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

然后运行代码的调试构建。这两件事中的一件会发生:

  • 如果断言失败:您是对的。在某个时刻,您可以输入numOfAcc==0的else分支。你在问题中说的是真的
  • 如果断言没有失败:您错了。您永远不会进入numOfAcc==0的else分支。你在问题中说的是错的

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

当你做这个测试时会发生什么?

您的代码中存在短路问题(正如@MikeSeymour所说,到目前为止,这不会导致任何问题,但需要在受伤之前解决(

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

仅当numOfAcc <10时才评估numOfAcc == 0,即仅当第一个条件为假时才评估第二个条件。否则,if-条件为真,并且由于true || false == true,不需要评估第二个条件,因此对第二个情况的评估无关紧要。

因此,您应该进行单独的检查,因为如果一个数字是0,它总是小于10,因此条件将始终为true。

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

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

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

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

if...else语句没有任何错误。

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