C++自定义奇偶判断函数失效,始终输出奇数求解决
问题排查与解决:奇偶判断函数失效的原因
错误根源
你的iseven函数判断逻辑完全错误。C++中整数除法a / 2是截断取整的,只有当a是0或绝对值小于2的负数时,a / 2才会等于0——比如-1/2=0,但绝大多数输入(比如2、3、4这类常规数字)都会让a/2的结果大于0,导致函数永远返回0,主函数因此始终走else分支输出奇数结果。
正确的判断方式
判断奇偶性应该用取模运算符%,它会返回除法的余数。偶数除以2余数为0,奇数余数为1,这才是正确的判断依据。
修正后的代码
#include <iostream> using namespace std; int iseven(int a) { if (a % 2 == 0) { // 替换为取模判断逻辑 return 1; } return 0; } int main() { int num; cin >> num; if (iseven(num)) { cout << "number even"; } else { cout << "odd number"; // 顺带修正了原输出里多余的"h" } return 0; }
可选优化
如果想让代码更简洁且语义更清晰,可以改用bool类型作为返回值:
#include <iostream> using namespace std; bool iseven(int a) { return a % 2 == 0; // 直接返回表达式结果 } int main() { int num; cin >> num; cout << (iseven(num) ? "number even" : "odd number"); return 0; }
这个版本不仅更短,bool类型也更贴合“是否为偶数”的逻辑语义,同时负数的情况也能正确处理(比如-4%2=0,会被判定为偶数)。
内容的提问来源于stack exchange,提问作者OMKAR
相关产品推荐
相关产品推荐

