如果数字长于 5 位,则确定数字是奇数还是偶数的程序显示错误输出

Program that determines if a number is odd or even shows the wrong output if number is longer than 5 digits

如果我输入的数字超过 5 位,它会显示错误的数字。例如:

Enter Integer: 123456
-7616 is EVEN.-7616 is ODD.

我的老师希望我们使用 Turbo C++,但在我 运行 一个程序后它有时会冻结,所以我改用 OnlineGDB (https://www.onlinegdb.com)(语言:C (TurboC))。这是我的代码:

#include <stdio.h>
#include <conio.h>

int number;

int main()
{
    clrscr();
    
    printf("Enter Integer: ", number);
    scanf("%d", &number);
    
    if ((number%2)==0)
    {
        printf("%d is EVEN.", number);
    }
    
    printf("%d is ODD.", number);
    
    getch();
    return(0);
}

看起来int是一个16位整数。 123456 大于 16 位有符号整数限制(32767),所以 scanf() 不能将整数放入 number。相反,它会被截断。 123456用二进制表示为11110001001000000。那是 17 位,但只有最后 16 位可以放入 number。最左边的位消失后,我们得到 1110001001000000,它是 two’s complement 形式的 -7616(整数使用的形式)。

尝试使用更大的整数类型,例如 long

正如其他人在评论中建议的那样,您可能希望将奇数的 printf() 放在 else.