c 语言long型问题

ljq8588fresh 2007-12-11 06:00:24
int main()
{
long val;
scanf("%ld",&val);
if(val > 2147483647)//2147483647是长整型的最大范围
{
printf("error!\n");
}
return 0;
}
当输入一个大于2147483647却不能报错。
该怎么样做才能使它报错呢?
...全文
476 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
oldmanzhao 2007-12-12
  • 打赏
  • 举报
回复
不知道楼主想实现什么?这样做似乎没有什么意义,想判溢出?用别的方法好了。
阿呆_ 2007-12-12
  • 打赏
  • 举报
回复
这段程序只有在unix标准的64位c/c++编译器生成才能得到你期望的结果。 因为unix标准的64位编译器的long是64位的。 而微软的64位编译器的long还是32位的。
mbmseason 2007-12-11
  • 打赏
  • 举报
回复
如果你想在val中保存负数就用下面的代码:
int main()
{
long val;
__int64 tmp;
long val = 0;
__int64 tmp;
scanf("%I64d", &tmp);
if(tmp & 0xFFFFFFFF00000000)
printf("error\n");
else
val = tmp & 0xFFFFFFFF;
return 0;
}
如果你根本就不想要保存负数,那就用下面的代码:
int main()
{
long val;
scanf("%ld",&val);
if(val < 0)
{
printf("error!\n");
}
return 0;
}
如果你没有64为运算支持,那只好先用scanf("%s", szTmp);来以字串方式获取输入,然后自己通过逐位计算long值,并判断是否出现溢出来检查是否超过long上限了,代码我就不写了。
xaobao 2007-12-11
  • 打赏
  • 举报
回复
呵呵有点意思
xx_hzbzlp 2007-12-11
  • 打赏
  • 举报
回复
哎...
kekedou 2007-12-11
  • 打赏
  • 举报
回复
呵呵 溢出了哦,但是val还是可以显示的啊,不会抱错。
ljq8588fresh 2007-12-11
  • 打赏
  • 举报
回复
我不应该继续下去,应该回去吃饭了。脑子成糨糊了。
xiao2003ran 2007-12-11
  • 打赏
  • 举报
回复
陷入悖论中。
错误犯的可爱…………
bjnova 2007-12-11
  • 打赏
  • 举报
回复
按%s输入,然后处理。scanf函数本身不处理这些问题。
chlaws 2007-12-11
  • 打赏
  • 举报
回复
输入超过2147483647,溢出了,比最大数小了
freshairfly 2007-12-11
  • 打赏
  • 举报
回复
已经溢出了呗,变成了负数
也就是说你的if语句永远不会满足。

用scanf来输入很难判断是否溢出,建议你采用获取字符串的方式,然后就比较容易判断是否溢出了
chlaws 2007-12-11
  • 打赏
  • 举报
回复
沙发
独孤过儿 2007-12-11
  • 打赏
  • 举报
回复
最大的数是2147483647,你想想,你输出的数字比这个还大,那它怎么保存呢?如果能比较,那就说明long还能支持更大的

数,因为你的val里面已经保存了啊

呵呵,思路没绕过来吧

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧