当前位置: 代码迷 >> C语言 >> [求助]为什么这个条件不执行?
  详细解决方案

[求助]为什么这个条件不执行?

热度:411   发布时间:2006-09-03 09:12:34.0
[求助]为什么这个条件不执行?

int shi;
scanf("%d",shi);
if (shi>32767)
printf("error.");

为什么当我输入32768时这个条件不执行,
是不是因为32768属于long型,给shi负值时要临时转化成int型 ,
所以shi=-1 了,这样对吗?

[此贴子已经被作者于2006-9-3 9:13:57编辑过]

搜索更多相关的解决方案: 条件  

----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽

2006-09-03 01:15:27
cdmalcl

等 级:贵宾
威 望:24
帖 子:4125
专家分:458
注 册:2005-9-23
  得分:0 
以下是引用走火在2006-9-3 9:12:34的发言:

int shi;
scanf("%d",&shi);
if (shi>32767)
printf("error.");

常见错误


----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽

2006-09-03 01:18:24
走火

等 级:新手上路
帖 子:426
专家分:0
注 册:2005-12-28
  得分:0 
谢谢大家

我回去试看看到底转换成什么了哈
----------------解决方案--------------------------------------------------------

如果您想检验一个数字是否溢出,那个程序是不行的.
#include "Stdio.h"
#include "stdlib.h"
#include "values.h"
int main(void)
{
char str[20];
int num;
gets(str);
if(atol(str)>MAXINT)
printf("error");
else
{
num=atoi(str);
printf("%d",num);
}
return 0;
}


----------------解决方案--------------------------------------------------------
谢谢大家,我终于明白了
原来(负数)符号位得到源码时也要取反,
我以前以为符号位就只起代表符号的作用,
不进行运算,所以遇到这种情况时就犯错了.

----------------解决方案--------------------------------------------------------
  相关解决方案