-2

这是我的代码,它检查numOfAcc (Variable) 是否小于 10 或等于 0。如果为真,则继续使用我提供的代码。

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 成员(属于一个类)初始化为零。但在运行模式下,它总是以 else 语句“MAXIMUM ACCOUNTS LIMIT REACHED”结束。

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

我的代码有什么问题?

4

3 回答 3

1

首先,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 分支。您在问题中所说的是错误的。

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

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

于 2013-05-27T14:32:29.800 回答
0
if (numOfAcc == 0)
{
}
else
{
    cout << c.numOfAcc;
}

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

if...else陈述没有错。

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

于 2013-05-27T15:57:18.600 回答
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

在你的 else 部分你有c.numOfAcc 但在你使用的检查中numOfAcc。为什么这不一致?可能是你应该使用if(c.numOfAcc<10 || c.numOfAcc == 0)

于 2013-05-27T14:33:38.137 回答