Code::Blocks编译C++正负奇偶判断代码提示else后加;,加后逻辑错误
问题成因
C++语法中,else分支不需要也不能直接跟随判断条件,只有else if才可以携带条件表达式。你编写的else (n>0 && n%2 !=0)代码行,会被编译器拆分为两个独立部分解析:
- 第一部分是无任何条件的
else分支定义 - 第二部分的
(n>0 && n%2 !=0)是一个单独的表达式语句
此时如果不在该行末尾加分号,编译器会认为表达式语句未结束,就会抛出「expected ';' before '{' token」的报错;如果添加了分号,else的执行体就只有这个没有实际作用的表达式语句,后面包裹输出逻辑的{}块会被识别为和if-else结构完全无关的独立代码,不管前面的条件判断结果如何都会执行,就会出现逻辑错误。
修复方案
有两种可选修复方式,效果一致:
- 将最后一个
else修改为else if,保留后面的判断条件 - 直接删除
else后面的判断条件,因为前面三个判断分支已经覆盖了正偶数、负偶数、负奇数的所有情况,剩余的唯一可能就是正奇数,不需要额外判断。
修复后完整代码
#include <iostream> using namespace std; int main() { int n; cout<< "Enter the number you want to check: \n"; cin>>n; if(n>0 &&n%2 ==0){ cout<< "number is positive even \n"; } else if(n<0 &&n%2 ==0){ cout<< "number is negative even \n"; } else if(n<0 &&n%2 !=0){ cout<< "number is negative odd \n"; } // 也可以写成 else if(n>0 && n%2 !=0) 效果一致 else { cout<< "number is positive odd \n"; } return 0; }
内容的提问来源于stack exchange,提问作者abhi singh
相关产品推荐
相关产品推荐

