C MVS输入超过10位数

时间:2012-11-24 11:30:07

标签: c

最近我尝试编写一个代码来搜索给定n中的某个数字。 代码工作得很好但是当我尝试插入超过10位数的n时,它真的很糟糕。

显然它与代码无关,我只是无法插入超过10位数。 我一定错过了什么......

例如这个简单的代码

#include <stdio.h>

int main()
{
  long int n;

  scanf("%ld", &n);

  printf("%ld", n);

  return 0;
} 

如果我喂它1111111111它会打印相同的东西,因为它少于11位数 如果我尝试喂它11111111111它会给我类似-1773790777的东西 为什么这发生在我身上?我做错了什么......

2 个答案:

答案 0 :(得分:1)

我猜你是在32位机器上,这意味着long int只有32位,这意味着它可以保持在减去20亿到20亿之间的值。当您尝试输入的内容远远超过该值时,值将换行。

如果你的编译器支持它,你应该开始使用像long long int这样的64位值。

答案 1 :(得分:1)

有符号整数的溢出是未定义的行为。我认为你的long int是4个字节,当你输入的数字大于它能容纳的数字时,会导致溢出。