这是我的代码,它检查 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存在问题
我的代码出了什么问题?
答案 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构建。这两件事之一将会发生:
请注意,在这两种可能的结果中,第一种结果是不可能的。
进行此测试会发生什么?
答案 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;
}
这只能打印零,因为numOfAcc
和c.numOfAcc
是两个不同的东西。
if...else
语句没有错。
您的代码还有其他问题,其他答案已解释过。