前言
此问题是指使用if() ... else
或类似条件语句的最常见(初学者)错误的规范集合。
答案旨在描述运行时的意外行为,语法缺陷和误解,如
if(x) {} else (y) {}
不应该在这里解决。
答案 0 :(得分:6)
if(x = 1) // ...
使用
==
表示平等比较。=
是一项分配,结果将作为强制转换评估为bool
。即评估为!= 0
的任何值都会导致true
。作为预防机制,请考虑以下表达式:
if(1 = x) // invalid assignment compilation error! if(1 == x) // valid equality comparison
通过始终将常量放在表达式的左侧,可以避免错误地使用赋值运算符。编译器将标记触发无效分配错误的任何错误。
if(answer == 'y' || 'Y')
变体:
if(answer == 'y','Y')
必须通过单独的比较来测试条件。||
运营商绑定并未执行此处预期的操作。请改用if(answer == 'y' || answer == 'Y')
。
if (0 < x < 42)
Python中的有效语法,具有预期的行为,该语法在C ++中有效,但解析为
if ((0 < x) < 42)
,因此false
/true
转换为0
/ {{1然后针对1
- &gt;进行测试总是< 42
。 必须使用单独的比较来测试条件:true
答案 1 :(得分:4)
if(mycondition); { // Why this code is always executed ??? }
在
;
声明之后,有一个多余的if()
。
if(mycondition) statement1(); statement2(); // Why this code is always executed ???
代码相当于
if(mycondition) { statement1(); } statement2();
statement2();
超出了条件块的范围。将{}
添加到群组对帐单。
if (mycondition) if (mycondition2) statement1(); else statement2();
代码相当于
if(mycondition) { if (mycondition2) statement1(); else statement2(); }
else
适用于之前的if
。添加{}
:if (mycondition) { if (mycondition2) statement1(); } else statement2();
同样适用于任何错误放置的;
循环语句,如
for(int x = 0;x < 5;++x); // ^ { // statements executed only once }
或
while(x < 5); // ^ { // statements executed only once }
答案 2 :(得分:-2)
if (north) {
} else if (south) {
} else if (west) {
} else if (east) {
}
潜在的错误的其他条款 - 错误的方向。
有趣放置{}因为他们添加了它们,错放了它们然后删除了错误的。
if (a) {
}
if (b) {
}
if (c) {
}
缺少其他内容,因为即使有更多属实,也只应完成其中一项。