如果数字长于 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
.
中
如果我输入的数字超过 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
.