C语言判断数字奇偶程序输入超5位时输出错误如何解决
问题原因
- 整数溢出:Turbo C是16位编译环境,默认
int类型占2字节,可表示的有符号整数范围为-32768~32767。你输入的123456远大于该范围上限,发生整数溢出,高位被截断后的值就是你输出里的-7616,属于未定义行为。 - 逻辑分支错误:你的代码仅将打印偶数的语句放在
if判断块中,无论判断结果是否成立,打印奇数的语句都会执行,所以偶数场景下会同时输出EVEN和ODD两行结果。 - 额外小问题:
printf("Enter Integer: ", number);中的number是多余参数,格式化字符串没有对应占位符,不会生效但也不影响运行。
修复方案
- 将变量类型从
int替换为long,long在Turbo C中占4字节,可表示范围为-2147483648~2147483647,可容纳更长的整数,同时对应修改scanf和printf的格式化符为%ld。 - 补充
else分支,将打印奇数的语句放入else块,保证两种判断分支互斥执行。
修复后的参考代码:
#include <stdio.h> #include <conio.h> long number; int main() { clrscr(); printf("Enter Integer: "); scanf("%ld", &number); if ((number % 2) == 0) { printf("%ld is EVEN.", number); } else { printf("%ld is ODD.", number); } getch(); return 0; }
如果需要支持更长的数字输入,避免溢出问题,可以直接读取输入字符串,判断最后一位字符是否为0/2/4/6/8即可,这种方案不受整数类型长度限制。
内容的提问来源于stack exchange,提问作者user17410586
相关产品推荐
相关产品推荐

