【发布时间】:2018-03-17 03:48:35
【问题描述】:
这是我的程序代码。
#include <stdio.h>
int main() {
int number;
printf("Enter an integer: ");
scanf("%d", &number);
printf("You entered: %d", number);
return 0;
}
如果我输入一个整数:12345678912345678
结果显示:1578423886
为什么会这样?
【问题讨论】:
-
不同的变量类型有最小值和最大值。您输入的数字大于
int的最大值。 -
12345678912345678是一个 54 位数字。在十六进制中它是0x2bdc545e14d64e。有趣的是1578423886是0x5e14d64e。 -
链接副本中的答案和此处的答案都不完全正确,因为它是 ISO/IEC 9899:2011 第 7.21.6.2 节第 10 节中所述的“未定义行为”。一切都可能发生,它甚至可能会杀死你的猫。这就是为什么您必须始终检查
scanf的返回!
标签: c